资源描述:
《oracle :把表里的数据导成insert语句》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Oracle:把表里的数据导成insert语句.txt昨天是作废的支票;明天是尚未兑现的期票;只有今天才是现金,才能随时兑现一切。人总爱欺骗自己,因为那比欺骗别人更容易。把表里的数据导成insert语句2003-10余枫Internet上还有一种免费的MYSQL数据库很流行。有些时候我们需要把oracle里的数据导入MYSQL里。生成insertinto表名....是一种很简单直接的方法。今年六月份从www.arikaplan.com/oracle.html看到一个可以生成insertinto表名....语句的存储过
2、程genins_output。我按中文习惯的时间格式YYYY-MM-DDHH24:MI:SS改了改,并新写了一个存储过程genins_file.sql。它可以把小于16383条记录表里的数据导成(insertinto表名....)OS下文件。调用它之前,DBA要看看数据库的初始化参数UTL_FILE_DIR是否已经正确地设置:SQL>showparametersutl_file_dir;可以看到该参数的当前设置。如果没有值,必须修改数据库的initsid.ora文件,将utl_file_dir指向一个你想用PL/SQ
3、LfileI/O的路径。重新启动数据库。此参数才生效。调用它,可以把表里的数据生成(insertinto表名....)OS下文件的过程genins_file方法:SQL>execgenins_file('emp','/oracle/logs','insert_emp.sql');
4、
5、
6、表名,可变
7、生成OS下文件名,可变
8、utl_file_dir路径名,不变(我设置的是/oracle/logs)SQL>exit可以在OS目录/oracle/logs下看到insert_emp.sql文件。注意事项:生成(insertin
9、to表名....)OS下文件最多32767行。因为我一条insert分成两行,所以最多处理16383条记录的表。在MYSQL数据库里运行insert_emp.sql,就可以方便地把oracle数据转移到MYSQL数据库里CREATEORREPLACEPROCEDUREgenins_file(p_tableINvarchar2,p_output_folderINVARCHAR2,p_output_fileINVARCHAR2)IS--l_column_listVARCHAR2(32767);l_value_listVA
10、RCHAR2(32767);l_queryVARCHAR2(32767);l_cursorNUMBER;ignoreNUMBER;l_insertline1varchar2(32767);l_insertline2varchar2(32767);cmn_file_handleUTL_FILE.file_type;--FUNCTIONget_cols(p_tableVARCHAR2)RETURNVARCHAR2ISl_colsVARCHAR2(32767);CURSORl_col_cur(c_tableVARCHAR2
11、)ISSELECTcolumn_nameFROMuser_tab_columnsWHEREtable_name=upper(c_table)ORDERBYcolumn_id;BEGINl_cols:=null;FORrecINl_col_cur(p_table)LOOPl_cols:=l_cols
12、
13、rec.column_name
14、
15、',';ENDLOOP;RETURNsubstr(l_cols,1,length(l_cols)-1);END;--FUNCTIONget_query(p_tableINVARCHAR2
16、)RETURNVARCHAR2ISl_queryVARCHAR2(32767);CURSORl_query_cur(c_tableVARCHAR2)ISSELECT'decode('
17、
18、column_name
19、
20、',null,''null'','
21、
22、decode(data_type,'VARCHAR2','''''''''
23、
24、'
25、
26、column_name
27、
28、'
29、
30、''''''''','DATE','''''''''
31、
32、to_char('
33、
34、column_name
35、
36、',''YYYY-MM-DDHH24:MI:SS''
37、)
38、
39、''''''''',column_name)
40、
41、')'column_queryFROMuser_tab_columnsWHEREtable_name=upper(c_table)ORDERBYcolumn_id;BEGINl_query:='SELECT';FORrecINl_query_cur(p_table)LOOPl_query:=