问一个问题.
在数据库中,查询一张表有10行数据,然后我想把这个表导出到一个文件里!!!(oracle库)
然后,再把这个文件导入到sql server 库中的`一张新建表中. 请问要如何操作呢?
相反 在数据库中,查询一张表有10行数据,然后我想把这个表导出到一个文件里!!!(sql server 库)
然后,再把这个文件导入到oracle 库中的`一张新建表中. 请问要如何操作呢?
在数据库中,查询一张表有10行数据,然后我想把这个表导出到一个文件里!!!(oracle库)
然后,再把这个文件导入到sql server 库中的`一张新建表中. 请问要如何操作呢?
相反 在数据库中,查询一张表有10行数据,然后我想把这个表导出到一个文件里!!!(sql server 库)
然后,再把这个文件导入到oracle 库中的`一张新建表中. 请问要如何操作呢?
可以使用 bcp 命令将数据导成文本
然后 Oracle 使用 sql loader 将文本文件导入导数据库
先建立目录,给赋予读写权限。create or replace directory D_OUTPUT as 'd:/export_data/';
grant read,write on directory D_OUTPUT to som;
GRANT EXECUTE ON utl_file TO som;修改参数utl_file_dir,此参数为静态参数,需重启数据库。alter system set utl_file_dir='d:/export_data/' scope=spfile;shutdown immediatestartup示例存储过程如下:create or replace procedure export_data_out_excel (
pfile_name varchar2,
pexport_sql varchar2
)
/**
使用utl_file将需要导出的数据写入到文本文件
pfile_name:输出文件名exp.txt。
pexport_sql:执行的sql语句,select id||chr(9),name||chr(9) from tablename,chr(9)是TAB字符,以保证数据输出到excel能自动换到下一列。
**/
as
type som_content_record_type is record (
id varchar2 (25),
name varchar2 (33),
re varchar2 (109),
opttime varchar2 (50)
); som_content_rec som_content_record_type;
err_num number;
err_msg varchar2 (2000); type cur_som_content is ref cursor; c_som_content cur_som_content;
l_file utl_file.file_type;
begin
l_file :=
utl_file.fopen ('d:/export_data/', pfile_name || '.txt', 'w');
utl_file.put_line
(l_file,
'id name re opttime'
);
open c_som_content for pexport_sql; loop
fetch c_som_content
into som_content_rec.id, som_content_rec.name,
som_content_rec.re, som_content_rec.opttime; exit when c_som_content%notfound;
utl_file.put (l_file, som_content_rec.id);
utl_file.put (l_file, som_content_rec.name);
utl_file.put (l_file, som_content_rec.re);
utl_file.put_line (l_file, som_content_rec.opttime);
end loop; close c_som_content; utl_file.fflush (l_file);
utl_file.fclose (l_file);
exception
when others
then
if utl_file.is_open (l_file)
then
utl_file.fclose (l_file);
err_num := sqlcode;
err_msg := substr (sqlerrm, 1, 2000); insert into oracle_error_log
(error_code, error_msg, date_time, error_resource
)
values (err_num, err_msg, sysdate, 'export_data_out_txt'
); commit;
end if;
end;
第二步、使用bcp将文本文件导入到sql server
bcp "[Test].[dbo].[w_PlayerConnGameInfo_2008_2]" in "d:\export_data\exp.txt" -f "d:\export_data\PlayInfo.fmt" -S "192.168.1.129" -U "Admin" -P "Admin"
exec master..xp_cmdshell
''bcp "SELECT * FROM tablename" queryout "d:\export_data\test.txt" -T -c -C 65001''
第二步、从文本文件导入到oracle
LOAD DATA
INFILE 'd:/export_data/test.txt’
INTO TABLE tableName
FIELDS TERMINATED BY ","(field1,field2,field3,field4)解释:infile 指数据源文件 这里我们省略了默认的 discardfile result.dsc badfile result.bad
into table tableName 默认是INSERT,也可以 APPEND into table tableName 为追加方式,或REPLACE 注意:1、insert,为缺省方式,在数据装载开始时要求表为空
2、append,在表中追加新记录
3、replace,删除旧记录,替换成新装载的记录
4、truncate,同上
1、采用中间文件转换的话就要考虑文件大小的限制
oracle→中间文件(txt、xls……)→SQL SERVER
2、可以在oracle中建立透明网关,直接与SQL SERVER连接