oracle procedure简单的将临时表的数据插入或更新到目标表

CREATE OR REPLACE PROCEDURE DEAL_SYNC_SCH_CUSTPHONE_NEW AS
  CURSOR C_CURU IS
    SELECT *
      FROM CBS_COS.SCH_CUSTPHONE_TEMP S
     WHERE S.ID IN (SELECT T.ID
                      FROM CBS_COS.SCH_CUSTPHONE_TEMP T
                    MINUS
                    SELECT C.ID FROM CBS_COS.SCH_CUSTPHONE C);
  CURSOR C_CUR IS
    SELECT T.*
      FROM CBS_COS.SCH_CUSTPHONE_TEMP T, CBS_COS.SCH_CUSTPHONE C
     WHERE T.ID = C.ID;
  C_ROW  C_CUR%ROWTYPE;
  C_ROWU C_CURU%ROWTYPE;
  C_NN   NUMBER := 0;
BEGIN
  FOR C_ROW IN C_CUR LOOP
    UPDATE CBS_COS.SCH_CUSTPHONE C
       SET C.ID          = C_ROW.ID,
           C.PHONENO     = C_ROW.PHONENO,
           C.TYPE        = C_ROW.TYPE,
           C.CUSTID      = C_ROW.CUSTID,
           C.OPID        = C_ROW.OPID,
           C.CREATE_TIME = C_ROW.CREATE_TIME,
           C.UPDATE_TIME = C_ROW.UPDATE_TIME
     WHERE C.ID = C_ROW.ID;
    C_NN := C_NN + 1;
    IF MOD(C_NN, 100000) > 0 THEN
      COMMIT;
    END IF;
    COMMIT;
  END LOOP;

  FOR C_ROWU IN C_CURU LOOP
    INSERT INTO CBS_COS.SCH_CUSTPHONE
      (ID, PHONENO, TYPE, CUSTID, OPID, CREATE_TIME, UPDATE_TIME)
    VALUES
      (C_ROWU.ID,
       C_ROWU.PHONENO,
       C_ROWU.TYPE,
       C_ROWU.CUSTID,
       C_ROWU.OPID,
       C_ROWU.CREATE_TIME,
       C_ROWU.UPDATE_TIME);
    C_NN := C_NN + 1;
    IF MOD(C_NN, 100000) > 0 THEN
      COMMIT;
    END IF;
  END LOOP;
  COMMIT;
END DEAL_SYNC_SCH_CUSTPHONE_NEW;

最简单实现,但是查询次数会更多的另一种方法

CREATE OR REPLACE PROCEDURE DEAL_SYNC_SCH_CUSTPHONE AS
      CURSOR C_CUR IS SELECT *  FROM  CBS_COS.SCH_CUSTPHONE_TEMP;
    C_ROW C_CUR%ROWTYPE;
    C_NUM NUMBER   :=0;
    C_NN  NUMBER   :=0;
BEGIN
  FOR C_ROW IN C_CUR LOOP
    SELECT COUNT(1) INTO C_NUM FROM CBS_COS.SCH_CUSTPHONE C WHERE C.ID= C_ROW.ID;
    IF C_NUM >0 THEN
      UPDATE CBS_COS.SCH_CUSTPHONE C SET
      C.ID=C_ROW.ID,
      C.PHONENO=C_ROW.PHONENO,
      C.TYPE =C_ROW.TYPE,
      C.CUSTID  =C_ROW.CUSTID,
      C.OPID    =C_ROW.OPID,
      C.CREATE_TIME  =C_ROW.CREATE_TIME,
      C.UPDATE_TIME=  C_ROW.UPDATE_TIME
      WHERE C.ID= C_ROW.ID;
    ELSE
      INSERT INTO CBS_COS.SCH_CUSTPHONE  (ID, PHONENO, TYPE, CUSTID, OPID, CREATE_TIME, UPDATE_TIME)
      VALUES (C_ROW.ID, C_ROW.PHONENO, C_ROW.TYPE, C_ROW.CUSTID, C_ROW.OPID, C_ROW.CREATE_TIME, C_ROW.UPDATE_TIME);
    END IF;
    C_NN :=C_NN+1;
    IF MOD(C_NN,10000)>0  THEN
      COMMIT;
      END IF;
      END LOOP;
      COMMIT;
      END DEAL_SYNC_SCH_CUSTPHONE;

 

转载于:https://www.cnblogs.com/lianshan/p/5810422.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值