17,086
社区成员
发帖
与我相关
我的任务
分享
CREATE OR REPLACE PROCEDURE INSERT_REPORT(
FILE_NAME VARCHAR2,
LINE_NO NUMBER) IS
CURRENT_NO NUMBER := 0;
BEGIN
DELETE FROM T_USER_REPORT;
CURRENT_NO := CURRENT_NO+1;
WHILE CURRENT_NO<=LINE_NO LOOP
INSERT INTO T_USER_REPORT(FILENAME,LINENO,COLUMNNO,RESULTCODE) VALUES(FILE_NAME,CURRENT_NO,0,'00');
CURRENT_NO := CURRENT_NO+1;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END INSERT_REPORT;
CREATE OR REPLACE PROCEDURE INSERT_REPORT(
FILE_NAME VARCHAR2,
LINE_NO NUMBER) IS
CURSOR CUR_FILE IS
SELECT FILE_NAME,LEVEL FROM DUAL
CONNECT BY LEVEL <=LINE_NO;
TYPE T_FILE_NAME IS TABLE OF VARCHAR2 INDEX BY PLS_INTEGER;
TYPE T_ROW_NUM IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
TBL_FILE_NAME T_FILE_NAME;
TBL_ROW_NUM T_ROW_NUM;
V_BULK_CNT INTEGER:=10000;--自己定义多少行提交一次
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE T_USER_REPORT';
OPEN CUR_FILE;
LOOP
EXIT WHEN CUR_FILE%NOTFOUND;
FETCH CUR_FILE BULK COLLECT INTO
TBL_FILE_NAME,
TBL_ROW_NUM LIMIT V_BULK_CNT;
BEGIN
<<BULK_INSERT>>
FORALL I IN INDICES OF TBL_FILE_NAME SAVE EXCEPTIONS
INSERT/*+NOLOGGING*/ INTO T_USER_REPORT(FILENAME,LINENO,COLUMNNO,RESULTCODE)
VALUES(TBL_FILE_NAME(I),TBL_ROW_NUM(I),0,'00');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20001,'ERROR...');
END BULK_INSERT;
END LOOP;
END INSERT_REPORT;