如何把oracel中一张表的数据导入access,再从access导入oracle中的另一张表,求具体步骤

如何把oracel中一张表的数据导入access,再从access导入oracle中的另一张表,求具体步骤,第1张

首先, Windows 里面, 针对这个 Oracle , 创建一个 ODBC
然后在 Access 里面, 通过这个 ODBC, 创建 2个 链接表。
(也可以一个导入表, 一个链接表。 但是那个要 从 Access 导入到 oracle 的表,必须是链接的)
然后就简单了。
假如表结构一样, 那么从 原始表复制一下, 然后粘贴到目标表。
假如表结构不一样, 那么可以在 Access 里面, 导出到 Excel , 然后自己做处理
最后,在 Excel 里面复制, 再粘贴到 Access 的链接表里面。

一、点击开始-管理工具-数据源。(若不能找到就去控制面板找到管理工具就可以发现数据源)
2
二、出现ODBC管理器,里面有用户系统还有文件DSN
这三者区别是:
1用户DSN允许单个用户在单个计算机上访问数据库(一对一);
2系统DSN允许在某个计算机上的多个用户访问数据库(一机多用);
3文件DSN在一个以DSN扩展名结尾的文本文件中存储相关信息,并且可以被安装了相同驱动器的不同计算机上的多个用户共享。(多机多用)
(我们开发程序时候都是采用文件DNS模式)
3
三、找到安装oracle驱动程序。
4
四、填写数据源名称。这名称你自己定。但服务器填写就要根据你oracle配置服务名(我的经验另外一篇有讲解如何配置oracle客户端,不懂可以翻开我的经验有个oracle10g客户端配置)。
5
五、打开ACCESS,在对象-表-点击新建链接表。
6
六、在d出文件框,在文件类型里选择ODBC数据库。
7
七、点击机器数据源-选择你刚才设的数据源oracle。
8
八、就会d出odbc登录对话框。输入你的登录账户密码。确认即可。
9
九、选择你想链接表。你可以一次性选多个表。
10
十、在Access就可以看到你所要链接的表。

给你个组件包 我写的 Access Oracle SQL2000 SQL2005Mysql DB2通用的数据库复制
import javasql;
import javasqlResultSetMetaData;
//
//
//支持 ACCESS MYSQL SQL2000 SQL2005 DB2 ORACLE 需要下载驱动包
public class DatabaseCopyImpl {

Connection conFrom=null,conTo=null;
static public Connection getAccessConnection(String url)throws Exception{
ClassforName("sunjdbcodbcJdbcOdbcDriver");
String link="jdbc:odbc:driver={Microsoft Access Driver (mdb)}; DBQ="+url;
return DriverManagergetConnection(link);
}
static public Connection getMySQLConnection(String ip,int port,String databaseName,String username,String password)throws Exception{
ClassforName("commysqljdbcDriver");
if(port==0) port=3306;
String link="jdbc:mysql://"+ip+":"+StringvalueOf(port)+"/"+databaseName;
return DriverManagergetConnection(link,username,password);
}

static public Connection getSQL2000Connection(String ip,int port,String databaseName,String username,String password)throws Exception{
ClassforName("commicrosoftjdbcsqlserverSQLServerDriver");
if(port==0) port=1433;
String link="jdbc:microsoft:sqlserver://"+ip+":"+StringvalueOf(port)+";databaseName="+databaseName;
return DriverManagergetConnection(link,username,password);
}
static public Connection getSQL2005Connection(String ip,int port,String databaseName,String username,String password)throws Exception{
ClassforName("commicrosoftsqlserverjdbcSQLServerDriver");
if(port==0) port=1433;
String link="jdbc:sqlserver://"+ip+":"+StringvalueOf(port)+";databaseName="+databaseName;
return DriverManagergetConnection(link,username,password);
}
static public Connection getOracleConnection(String ip,int port,String databaseName,String username,String password)throws Exception{
ClassforName("oraclejdbcdriverOracleDriver");
if(port==0) port=1521;
String link="jdbc:oracle:thin:@"+ip+":"+StringvalueOf(port)+":orcl";
return DriverManagergetConnection(link,username,password);
}
static public Connection getDB2Connection(String ip,int port,String databaseName,String username,String password)throws Exception{
ClassforName("COMibmdb2jdbcappDB2Driver");
if(port==0) port=50000;
String link="jdbc:db2://"+ip+":"+StringvalueOf(port)+"/"+databaseName;
return DriverManagergetConnection(link,username,password);
}

public DatabaseCopyImpl(){
//默认构造函数

}
public Connection getFromDatabase(String type,String url,String ip,int port,String databaseName,String username,String password)throws Exception{
Connection con=null;
if(typeequals("ACCESS")) con=getAccessConnection(url);
else if(typeequals("MYSQL")) con=getMySQLConnection(ip,port,databaseName,username,password);
else if(typeequals("SQL2000")) con=getSQL2000Connection(ip,port,databaseName,username,password);
else if(typeequals("SQL2005")) con=getSQL2005Connection(ip,port,databaseName,username,password);
else if(typeequals("ORACLE")) con=getOracleConnection(ip,port,databaseName,username,password);
else if(typeequals("DB2")) con=getDB2Connection(ip,port,databaseName,username,password);
consetAutoCommit(false);
conFrom=con;
return con;
}

public Connection getToDatabase(String type,String url,String ip,int port,String databaseName,String username,String password)throws Exception{
Connection con=null;
if(typeequals("ACCESS")) con=getAccessConnection(url);
else if(typeequals("MYSQL")) con=getMySQLConnection(ip,port,databaseName,username,password);
else if(typeequals("SQL2000")) con=getSQL2000Connection(ip,port,databaseName,username,password);
else if(typeequals("SQL2005")) con=getSQL2005Connection(ip,port,databaseName,username,password);
else if(typeequals("ORACLE")) con=getOracleConnection(ip,port,databaseName,username,password);
else if(typeequals("DB2")) con=getDB2Connection(ip,port,databaseName,username,password);
consetAutoCommit(false);
conTo=con;
return con;
}
public int copyTableDataAll(String fromTable,String toTable,String[] field,String[] fieldType,String key,int keyBeginValue)throws Exception{
//参数:来自表 复制到表 字段名数组 字段类型数组 关键字(不在字段名数组) 关键字起始值

Statement sta1=conTocreateStatement();
Statement sta2=conFromcreateStatement();
ResultSet resultFrom=null;
int sum=0;
String tempKey="id"; //自动主键
String createTableSQL=null;
if(key==null) createTableSQL="CREATE TABLE "+toTable+" ( "+tempKey+" bigint primary key"; //创建表sql语句
else createTableSQL="CREATE TABLE "+toTable+" ( "+key+" bigint primary key";
String selectFromTable=null; //读取表sql语句
String insertToSQL="INSERT INTO "+toTable+"(";
String insertToSQLHead=null;
if(field==null || fieldType==null)
{
resultFrom=sta2executeQuery("SELECT FROM "+fromTable);
ResultSetMetaData meta=resultFromgetMetaData();
int sumField=metagetColumnCount();
field=new String[sumField];
for(int k=0;k<sumField;k++){
createTableSQL=createTableSQL+","+metagetColumnName(k)+" "+metagetColumnType(k);
insertToSQL=insertToSQL+","+metagetColumnName(k);
field[k]=metagetColumnName(k);
}
}
else
{
selectFromTable="SELECT "+field[0]; //读取表sql语句

for(int j=1;j<fieldlength;j++)
selectFromTable=selectFromTable+","+field[j];
if(key!=null) selectFromTable=selectFromTable+","+key+" FROM "+fromTable;
resultFrom=sta2executeQuery(selectFromTable);

for(int i=0;i<fieldlength;i++){
createTableSQL=createTableSQL+","+field[i]+" "+fieldType[i];
insertToSQL=insertToSQL+field[i]+",";
}
}
createTableSQL=createTableSQL+")";
if(key==null) insertToSQL=insertToSQL+tempKey+") ";
else insertToSQL=insertToSQL+key+") ";

if(sta1execute(createTableSQL)) Systemoutprintln("创建表失败,请检查字段:"+createTableSQL);
insertToSQLHead=insertToSQL;
while(resultFromnext()){
insertToSQL=insertToSQLHead+" VALUES(";
for(int x=0;x<fieldlength;x++){
insertToSQL=insertToSQL+"'"+resultFromgetString(field[x])+"',";
}
if(key==null) insertToSQL=insertToSQL+(keyBeginValue++)+")";
else insertToSQL=insertToSQL+resultFromgetString(key)+")";
if(sta1executeUpdate(insertToSQL)!=0) sum++;
insertToSQL=null;
}
conTocommit();
conFromcommit();
sta1close();
sta2close();
conToclose();
conFromclose();
return sum;
}
}

oracle的表没有方法直接导入到access中,只能通过oracle导出到excel,再从excel导入到access中。

工具:PLSQL Developer、excel 2013、access 2013

步骤:

1、通过查询语句查询出要保存的结果。

2、右键结果,将结果保存成csv文件。

3、选择保存路径,起好文件名。

4、将保存的文件保存类型改为excel的格式,及xlsx。

6、打开access,选择外部数据-Excel。

5、选择文件处选择要导入的文件,即刚刚保存的“111xlsx”。并选中将元数据导入当前数据库的新表中。

6、接着,勾选“第一行包含列标题”。

7、为字段1起名为“SID”。

8、选择“不要主键”。

9、为新表起名为“test”。

10、导入成功。

ACCESS的说明,好像不能自动导入到ORACLE的COMMENT字段里,需要自己手动了!
如果能用POWERDESIGNER逆向工程的话,或许能导入,但是我没试过!
帮不了你了!

首先,确认你需要迁移的是哪一部分,如果只是数据文件(表数据)迁移的话请看下面步骤。

在Sqlserver端,通过syscolumns和sysobjects查询出系统每一个有效表的名字,字段,字段类型,长度

在oracle端新建一个空的库,然后依次建好对应的表,名字类型都用导出来的

sqlserver端,导出数据,各种办法,建议BCP命令导出所有数据表到文本格式

oracle端,通过sqlldr导入数据

重建索引,视图,存储过程等等,这些语法不同的原因都需要重新创建


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13335372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存