Oracle存储过程

分批从一张表导入另一张备份表,使用游标
/*调用存储过程*/
call TABLE1_TRANSFER_TO_BAK('2022-07-01 00:00:00', '2022-07-02 00:00:00');

/*创建存储过程*/
create or replace procedure TABLE1_TRANSFER_TO_BAK(
    START_TIME IN varchar2,
    END_TIME IN varchar2
) AS
begin
    DECLARE
        cursor cur is select * from TABLE1 t1 where not exists (select 1 from TABLE1_BAK t2 where
        t1.id=t2.id) and t1.startTime >= to_date(START_TIME, 'YYYY-MM-DD HH24:MI:SS') and t1.startTime <= to_date(END_TIME, 'YYYY-MM-DD HH24:MI:SS');
        TYPE rec IS TABLE OF cur%ROWTYPE;
        recs rec;
    begin
        open cur;
        WHILE (TRUE) LOOP
            FETCH cur BULK COLLECT
            INTO recs LIMIT 5000;
           FORALL i IN 1 .. recs.COUNT 
                INSERT INTO TABLE1_BAK ("ID","CREATED_TIME","MODIFIED_TIME","AUTHFLAG","CLIENTFILENAME","CLIENTIP","COMPRESSFLAG","CONTLEN","EBCDICFLAG","ENDTIME","FILEEXISTS","FILEINDEX","FILEMSGFLAG","FILENAME","FILERENAMECTRL","FILERETMSG","FILESIZE","FILEVERSION","LASTPIECE","NODELIST","NODENAME","OFFSET","PIECENUM","SCRTFLAG","SERVERIP","SERVERNAME","STARTTIME","SUSS","SYSNAME","TARFILENAME","TARSYSNAME","TRANCODE","UNAME","NANO","ERRCODE","ORIFILENAME","FLOWNO","BYCLIENT") VALUES recs(i);
               COMMIT;
            EXIT WHEN cur%NOTFOUND;
        END LOOP;
        CLOSE cur;
        delete from TABLE1 t1 where t1.startTime >= to_date(START_TIME, 'YYYY-MM-DD HH24:MI:SS') and t1.startTime <= to_date(END_TIME, 'YYYY-MM-DD HH24:MI:SS');
    END;
END;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值