前提:
拥有读写dba_source表的权限,一般此表权限属于系统管理员,最好拥有数据库管理员的登录用户和密码!
建表脚本如下:
/* --查找某个时间段的编译存过 select * from dba_source AS OF TIMESTAMP TO_TIMESTAMP('2017-9-22 15:10:00', 'YYYY-MM-DD HH24:MI:SS') where name like upper('%PROC_BXJS_ZHJF_ZZ%') and owner ='TLJYB' order by line; */ DROP TABLE p_temp; DROP TABLE n_temp; -----------------脚本---------------------- --创建临时表存放存过数据 create table p_temp as select * from dba_source AS OF TIMESTAMP TO_TIMESTAMP('2017-9-22 15:10:00', 'YYYY-MM-DD HH24:MI:SS') where name like upper('%PROC_BXJS_ZHJF_ZZ%') and owner ='TLJYB' order by line; select text from p_temp where name like upper('%PROC_BXJS_ZHJF_ZZ%') and owner = 'TLJYB' order by line; --创建表,存放拼接后的存过 create table n_temp ( xh VARCHAR2(4), text VARCHAR2(4000) );
存储过程脚本 如下:
CREATE OR REPLACE PROCEDURE PROC_temp IS s_text VARCHAR2(4000) :=''; i_Max_Line NUMBER(9) := 0; i_cs NUMBER(9) := 0; i NUMBER(9) := 0; CURSOR c_TJNY(i NUMBER) IS SELECT * FROM P_TEMP A WHERE A.LINE > (100 * i) AND A.LINE <= (100 * (i + 1)) ORDER BY LINE; BEGIN --返回参数初始化 SELECT MAX(a.line) INTO i_Max_Line FROM p_temp a; SELECT ceil(i_Max_Line/100) INTO i_cs FROM dual; --拼接字段 FOR count1 IN i..i_cs LOOP for cc in c_TJNY(count1) loop s_text :=s_text || cc.text ; end loop; --将拼接后字段插入表 INSERT INTO N_TEMP (XH, TEXT) SELECT count1, S_TEXT FROM DUAL; s_text :=''; END LOOP; COMMIT; END PROC_temp; /