暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

增量同步数据-MERGE INTO 实现

suger 2022-09-09
664
CREATE OR REPLACE PROCEDURE SP_EMP_BAK1_MERGE
  IS
/*  增量同步的逻辑:
1 先判断目标表中是否包含 源表中的数据 ,一般是通过 主键字段比较的。
2 如果源表的数据在目标表中 存在 ,那么就用 源表的数据 更新 目标表的数据 。
  如果源表的数据在目标表中 不存在 ,,那么就将 源表的数据 直接插入到目标表中。*/
BEGIN
  MERGE INTO  EMP_BAK1  M    -- 通过 MERGE 方法更新 EMP_BAK1 表
  USING ( SELECT * FROM EMP ) X -- 使用  X 这个结果集

/*1 先判断目标表中是否包含 源表中的数据 ,一般是通过 主键字段比较的。  */
  ON (M.EMPNO = X.EMPNO)     -- 比较字段是2个表的主键字段 EMPNO

/*2 如果源表的数据在目标表中 存在 ,那么就用 源表的数据 更新 目标表的数据 。*/
  WHEN MATCHED THEN
    -- 这里 UPDATE SET 中间没有表名 ,因为要更新的目标表在上面 MERGE 后面已经指定了
    UPDATE SET
        M.ENAME               = X.ENAME     ,
        M.JOB                 = X.JOB       ,
        M.MGR                 = X.MGR       ,
        M.HIREDATE            = X.HIREDATE  ,
        M.SAL                 = X.SAL       ,
        M.COMM                = X.COMM      ,
        M.DEPTNO              = X.DEPTNO    ,
        M.LAST_UPDATE_DATE    = SYSDATE
        -- 这个后面不用写 WHERE 条件 ,同时也不能写 分号 ;
/* 如果源表的数据在目标表中 不存在 ,,那么就将 源表的数据 直接插入到目标表中。 */
  WHEN NOT MATCHED THEN
    -- 这里的 INSERT   后面不跟表名,因为上面已经指定了。
       INSERT    (
                M.EMPNO             ,
                M.ENAME             ,
                M.JOB               ,
                M.MGR               ,
                M.HIREDATE          ,
                M.SAL               ,
                M.COMM              ,
                M.DEPTNO            ,
                M.LAST_UPDATE_DATE
                )
                VALUES(
                X.EMPNO     ,
                X.ENAME     ,
                X.JOB       ,
                X.MGR       ,
                X.HIREDATE  ,
                X.SAL       ,
                X.COMM      ,
                X.DEPTNO    ,
                SYSDATE
                );
   COMMIT ;
END SP_EMP_BAK1_MERGE ;
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论