导出数据库数据记录成insert语句的存储过程
2010-09-01 13:30
609 查看
借鉴了网上的一些方案,做了一个导出表或视图数据成insert语句的包:
CREATE OR REPLACE PACKAGE pkg_ExportData IS FUNCTION getfields( v_tname VARCHAR2) RETURN VARCHAR2; --v_tname 要输出的sql表名 PROCEDURE Print_insert( v_filepath VARCHAR2, v_filename VARCHAR2, v_tname VARCHAR2, cbatch NUMBER DEFAULT 0); --v_filepath 文件保存路径 --v_filename 文件名 --v_tname 要输出sql的表名 --cbatch 输出commit的间隔 END pkg_ExportData; CREATE OR REPLACE PACKAGE BODY PKG_EXPORTDATA AS /* 求输入表的字段列表 */ FUNCTION getfields( v_tname VARCHAR2) RETURN VARCHAR2 AS v_fields VARCHAR2(8000); v_columns VARCHAR2(8000); BEGIN FOR cur_fname IN (SELECT cname,coltype FROM col WHERE tname = upper(v_tname) ORDER BY colno ) LOOP IF v_fields IS NULL THEN v_columns :=cur_fname.cname; IF cur_fname.coltype ='DATE' THEN v_fields := 'decode(nvl('||cur_fname.cname||',''''),'''',''NULL'',to_date(''||'||cur_fname.cname||'||'',''yyyy-mm-dd hh24:mi:ss''))'; ELSIF cur_fname.coltype='VARCHAR2' OR cur_fname.coltype='CHAR' THEN v_fields :='decode(nvl('||cur_fname.cname||',''''),'''',''NULL'',''''''''||'||cur_fname.cname||'||'''''''')'; ELSE v_fields := 'decode(nvl('||cur_fname.cname||',''''),'''',''NULL'','||cur_fname.cname||')'; END IF; ELSE v_columns :=v_columns||','||cur_fname.cname; IF cur_fname.coltype ='DATE' THEN v_fields := v_fields||'||'',''||'||'decode(nvl('||cur_fname.cname||',''''),'''',''NULL'',to_date(''||'||cur_fname.cname||'||'',''yyyy-mm-dd hh24:mi:ss''))'; ELSIF cur_fname.coltype='VARCHAR2' OR cur_fname.coltype='CHAR' THEN v_fields :=v_fields||'||'',''||'||'decode(nvl('||cur_fname.cname||',''''),'''',''NULL'',''''''''||'||cur_fname.cname||'||'''''''')'; ELSE v_fields := v_fields||'||'',''||'||'decode(nvl('||cur_fname.cname||',''''),'''',''NULL'','||cur_fname.cname||')'; END IF; --v_fields := v_fields||'||'',''||'||cur_fname.cname; --v_fields := v_columns||','||cur_fname.cname; END IF; END LOOP; --v_fields:='select '||v_fileds||' from '||v_tname; v_fields := 'select '||''''||'insert into '||v_tname||'('||v_columns||') values('||''''||'||'||v_fields||'||'||''''||');'||''''||' from '||v_tname; RETURN v_fields; END getfields; /*将数据导出为insert into语句*/ PROCEDURE Print_insert( v_filepath VARCHAR2, v_filename VARCHAR2, v_tname VARCHAR2, cbatch NUMBER DEFAULT 0) AS type cur_alldata IS ref CURSOR; l_alldata cur_alldata; v_sql VARCHAR2(8000); v_row VARCHAR2(8000); file_handle UTL_FILE.FILE_TYPE; BEGIN EXECUTE IMMEDIATE 'create or replace directory PRINTFILE as '''||v_filepath||''''; EXECUTE IMMEDIATE 'alter session set nls_date_format='||''''||'yyyy-mm-dd hh24:mi:ss'||''''; file_handle:=UTL_FILE.FOPEN('PRINTFILE',v_filename,'W',32767); UTL_FILE.PUT_LINE(file_handle,'prompt Insert into '||v_tname||'...'); v_sql := getfields(v_tname); --dbms_output.put_line(v_sql); OPEN l_alldata FOR v_sql; LOOP FETCH l_alldata INTO v_row; EXIT WHEN l_alldata%notfound; -- 输出sql语句 --dbms_output.put_line(v_row); UTL_FILE.PUT_LINE(file_handle,v_row); --dbms_output.put_line(formatdata(v_tname,v_row)); IF mod(l_alldata%rowcount,cbatch) = 0 THEN --dbms_output.put_line('commit;'); UTL_FILE.PUT_LINE(file_handle,'commit;'); END IF; END LOOP; CLOSE l_alldata; UTL_FILE.PUT_LINE(file_handle,'commit;'); UTL_FILE.FCLOSE(file_handle); END Print_insert; END PKG_EXPORTDATA;
相关文章推荐
- 将数据库数据导出成insert语句的存储过程
- 将数据库数据导出成insert语句的存储过程
- sqlserver 表数据导出insert into 语句的存储过程
- 将数据库记录倒为Insert语句的存储过程
- 将数据库记录倒为Insert语句的存储过程
- 配置ODBC DSN数据源,导出数据库数据到Excel过程记录
- 存储过程—导出table数据为inser sqlt语句
- 根据表中数据生成insert语句的存储过程
- [PL/SQL]导入文件内的数据到数据库(针对本博的导出存储过程)
- 几个收藏的根据数据库生成Insert语句的存储过程
- sql server 2008R2数据库导出表里所有数据成insert 语句
- [Sqlite]-->嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录
- 将表里的数据批量生成INSERT语句的存储过程 继续增强版
- sqlserver 将数据导成insert语句的存储过程 整库
- oracle导出表insert语句存储过程
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 将表中的初始化数据转化成insert into语句的存储过程
- sql server 数据库导出表里所有数据成insert 语句
- 存储过程导出数据库数据
- SQL SERVER:把表里的数据导出成为INSERT INTO脚本的存储过程