存储过程
DECLARE
V_MONTH VARCHAR2(20);
V_SQL VARHCAR2(2000);
V_COUNT NUMBER(8) := 0;
CURSOR i is SELECT T.* FROM TABLE_NAME2 WHERE CONDITION;
BEGIN
SELECT TO_CHAR(SYSDATE, 'YYMMDD') INTO V_MONTH FROM DUAL;
--以表名拼接当前日期的方式建备份表
V_SQL := 'CREATE TABLE TABLE_NAME1'||V_MONTH||'AS SELECT FORM TABLE_NAME1'; EXECUTE IMMEDIATE V_SQL;
FOR TEMP1 IN i LOOP
FOR T2 IN ( --查询结果是202101到202207
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('202101', 'YYYYMM'), ROWNUM - 1), 'YYYYMM') MONTH
FORM DUAL CONNECT BY ROWNUM <= MONTHS_BETWEEN(TO_DATE('202207', 'YYYYMM'),
TO_DATE('202101', 'YYYYMM')) +1 ) LOOP
INSERT INTO TABLE_NAME1 SELECT COLUMN1, COLUMN2, T2.MONTH,
DECODE(COLUMN3, 'VALUE', 'Y', 'N') FROM TABLE_NAME1' ||V_MONTH;
V_COUNT := V_COUNT + 1;
IF MOD(V_COUNT, 1000) = 0 THEN --入库1000条时提交一次
COMMIT;
END IF;
END LOOP;
END LOOP;
DBMS_OUTPUT.PUT_LINE('入库数目为:' || V_COUNT);
END;