将oracle表中数据以insert into 语句导出,存储过程实现
创建游标对象
create or replace package test.PK_EXPORT_TABLE is type result is ref cursor;end ;
创建存储过程
CREATE OR REPLACE PROCEDURE P_EXPORT_TABLE(v_table in varchar, cresult out PK_EXPORT_TABLE.result ) as TYPE v_cur_tab_columns IS REF CURSOR;/*表各字段信息*/ v_tab_columns v_cur_tab_columns; v_sql_columns varchar2(500);/*查询字段信息*/ v_column_infor user_tab_columns%rowtype; /*行字录各字段数型为USRE_TAB_COLUMNS*/ v_sqlstr_part_1 varchar2(200):='';/*存放形成sql的第一部分*/ v_sqlstr_part_2 varchar2(500):='';/*存放形成sql的第二部分*/ v_sqlstr_part_3 varchar2(4000):='';/*存放形成sql的第三部分*/ v_sql varchar2(5000):='';/*存放形成的sql*/ v_sqlneed varchar2(100):=','||''''||','||''''||','; /*形成在VALUES中的分隔符 ”, “ */ begin v_sqlstr_part_1:='insert into '||upper(v_table)||' ('; /*查询表中各字段信息*/ v_sql_columns:='select * from user_tab_columns where table_name='||''''||UPPER(v_table)||''''||' AND data_type not in ('||''''||'BLOB'||''''||','||''''||'CLOB'||''''||') AND ROWNUM<20'; open v_tab_columns for v_sql_columns; loop fetch v_tab_columns into v_column_infor; exit when v_tab_columns%notfound; /*用于形成insert into table (。。。)中的字段*/ v_sqlstr_part_2:=v_sqlstr_part_2||v_column_infor.COLUMN_NAME||','; /*用于形成values (。。。)中的字段*/ v_sqlstr_part_3:=case when v_column_infor.DATA_TYPE='DATE' THEN v_sqlstr_part_3||'to_date(to_char('||'BZRQ'||','||''''||'yyyy-mm-dd hh24:mi:ss'||''''||'), '||''''||'yyyy-mm-dd hh24:mi:ss'||''''||')'||v_sqlneed when v_column_infor.DATA_TYPE='VARCHAR2' OR v_column_infor.DATA_TYPE='VARCHAR' or v_column_infor.DATA_TYPE='CHAR' THEN v_sqlstr_part_3||' case when '||v_column_infor.column_name||' IS NOT NULL THEN '||''''''''''||'||'||v_column_infor.COLUMN_NAME||'||'||''''''''''||' ELSE NULL END AS '||v_column_infor.COLUMN_NAME||v_sqlneed when v_column_infor.DATA_TYPE='NUMBER' THEN v_sqlstr_part_3||' case when '||v_column_infor.column_name||' IS NOT NULL THEN '||v_column_infor.COLUMN_NAME||' ELSE NULL END AS '||v_column_infor.COLUMN_NAME||v_sqlneed else --v_sqlstr_part_3||' case when '||v_column_infor.column_name||' IS NOT NULL THEN '||''''''''''||'||'||v_column_infor.COLUMN_NAME||'||'||''''''''''||' ELSE NULL END AS '||v_column_infor.COLUMN_NAME||v_sqlneed v_sqlstr_part_3||'NULL'||v_sqlneed end; end loop; /*去掉最后的“,”并加上VALUES*/ v_sqlstr_part_2:=substr(v_sqlstr_part_2,0,length(v_sqlstr_part_2)-1)||') values ('; /*去掉最后的“,“*/ v_sqlstr_part_3:=substr(v_sqlstr_part_3,0,length(v_sqlstr_part_3)-5)||','||''')'''; /*形成的sql*/ v_sql:='SELECT '''||v_sqlstr_part_1||v_sqlstr_part_2||''''||','||v_sqlstr_part_3||' FROM '||upper(v_table)||' '; /*打开游标并返回*/ open cresult for v_sql; Exception when others then open cresult for 'select * from '||v_table; --outstr:=v_sql; end P_EXPORT_TABLE;