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;

oracle procedure简单的将临时表的数据插入或更新到目标表的更多相关文章

  1. 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

    最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

  2. 09Oracle Database 数据表数据插入,更新,删除

    Oracle Database 数据表数据插入,更新,删除 插入数据 Insert into table_name(column) values(values); insert into studen ...

  3. .NET 百万级 大数据插入、更新 ,支持多种数据库

    功能介绍  (需要版本5.0.44) 大数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数据库 ...

  4. sql把一个表数据插入到另一张表

    把一个表数据插入到另一张表 insert into tableB (field1,field2,field3,field4) select field1,field2,field3,'val4' fr ...

  5. ALV编辑数据后未更新到内表

    在调用 ‘I_CALLBACK_USER_COMMAND’的时候定义 DATA: GR_ALV TYPE REF TO CL_GUI_ALV_GRID. "alv数据更改后更新到内表 CAL ...

  6. 09Microsoft SQL Server 表数据插入,更新,删除

    Microsoft SQL Server 表数据插入,更新,删除 向表中插入数据 INSERT INTO insert into tb1 values(0004,'张凤凤') insert into ...

  7. sql语句 怎么从一张表中查询数据插入到另一张表中?

    sql语句 怎么从一张表中查询数据插入到另一张表中?  ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...

  8. 在oracle中怎么把一张表的数据插入到另一张表中

    把table2表的数据插入到table1中 insert   into   table1   select   *   from   table2

  9. 微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息

    开篇介绍 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge Join 或者 Union All 等合并数据流组件对比起来作用正好相反.非常直观 ...

随机推荐

  1. Ajax实现异步上传图片

    要求:点击页面浏览按钮后,选择需要上传的图片,页面无刷新,将上传的图片展示出来 开发流程 一:在页面编写表单代码和js代码 <!DOCTYPE html PUBLIC "-//W3C/ ...

  2. Bootstrap打印问题

    删除bootstrap的样式引用,就可以正常打印预览了. bootstrap 设置了@media print相关属性导致 @media print { * { color: #000 !importa ...

  3. uva 10494 - If We Were a Child Again 大数除法和取余

    uva 10494 - If We Were a Child Again If We Were a Child Again Input: standard inputOutput: standard ...

  4. 【转】使用UMDH查找内存泄漏

    转载出处:http://blog.csdn.net/phiger/article/details/1932141 Umdh 是 Debugging Tools for Windows 里面的一个工具, ...

  5. HBase的多节点集群详细启动步骤(3或5节点)(分为Zookeeper自带还是外装)

    HBase的多节点集群详细启动步骤(3或5节点)分为: 1.HBASE_MANAGES_ZK的默认值是false(zookeeper外装)(推荐) 2.HBASE_MANAGES_ZK的默认值是tru ...

  6. apache的ab命令做压力测试

    1. 最基本的关心两个选项 -c -n 例: ./ab -c 100 -n 10000 http://127.0.0.1/index.php -c 100 即:每次并发100个-n 10000 即: ...

  7. MySQL设置密码的三种方法

    其设置密码有三种方法: a. ./mysqladmin -u root -p oldpassword newpasswd(记住这个命令是在/usr/local/mysql/bin中外部命令) b. S ...

  8. Volley 的使用以及自定义Request

    Volley 的使用以及自定义Request 一.什么是 Volley 2013年Google I/O大会上推出了一个新的网络通信框架.Volley是Android平台上的网络通信库,能使网络通信更快 ...

  9. java代理与动态代理的学习

    静态代理比较简单,就是代理对象与被代理对象继承相同的接口,代理类负责调用被代理类(委托类)的对象的相关方法去提供具体的服务,一个代理类只能为一个接口服务,要是有很多服务的话需要开很多代理类.而动态代理 ...

  10. 160803、如何在ES6中管理类的私有数据

    如何在ES6中管理类的私有数据?本文为你介绍四种方法: 在类的构造函数作用域中处理私有数据成员 遵照命名约定(例如前置下划线)标记私有属性 将私有数据保存在WeakMap中 使用Symbol作为私有属 ...