网站制作基础教程,三站一体网站公司,泰安信息港官网,广州网站制作哪家强PL/SQL全量同步_枯河垂钓的博客-CSDN博客 目录
增量同步
增量同步存储过程
ORACEL 独有的 增量更新 merge into 增量同步
逻辑: 用源表的数据更新目标表,数据存在则更新,数据不存在,则插入 实现的逻辑: 1. 首先判断目标表是否有源表的数据 2. 如果有,则用源表的数据更新… PL/SQL全量同步_枯河垂钓的博客-CSDN博客 目录
增量同步
增量同步存储过程
ORACEL 独有的 增量更新 merge into 增量同步
逻辑: 用源表的数据更新目标表,数据存在则更新,数据不存在,则插入 实现的逻辑: 1. 首先判断目标表是否有源表的数据 2. 如果有,则用源表的数据更新目标表 3. 如果没有,则查询源表的数据,直接插入
-- 造增量数据
INSERT INTO EMP_S(EMPNO,CREATE_DATE,UPDATE_DATE)VALUES(123,SYSDATE,SYSDATE);
INSERT INTO EMP_S(EMPNO,CREATE_DATE,UPDATE_DATE)VALUES(777,SYSDATE,SYSDATE);
COMMIT;UPDATE EMP_S S SET S.SAL1000,S.UPDATE_DATESYSDATE WHERE S.EMPNO7369;
COMMIT;
增量同步存储过程
CREATE OR REPLACE PROCEDURE SP_EMP_UPDATE (P_START_DATE IN DATE,P_END_DATE DATE)
IS
-- 创建一个游标,获取源表输入时间范围内的数据
CURSOR
CURSOR_EMP (P_START_DATE DATE,P_END_DATE DATE) IS
SELECT
S.EMPNO,
S.ENAME,
S.JOB,
S.MGR,
S.HIREDATE,
S.SAL,
S.COMM,
S.DEPTNO,
S.CREATE_DATE,
S.UPDATE_DATE
FROM EMP_S S
WHERE S.UPDATE_DATE P_START_DATE AND S.UPDATE_DATE P_END_DATE;V_COUNT NUMBER;
BEGIN-- 循环判断游标里,存储的目标表数据FOR X IN CURSOR_EMP(P_START_DATE,P_END_DATE) LOOPSELECT COUNT(1)INTO V_COUNTFROM EMP_T TWHERE T.EMPNOX.EMPNO;IF V_COUNT0 THEN INSERT INTO EMP_T E (
EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO,
CREATE_DATE,
UPDATE_DATE,
ETL_DATE )
VALUES (
X.EMPNO,
X.ENAME,
X.JOB,
X.MGR,
X.HIREDATE,
X.SAL,
X.COMM,
X.DEPTNO,
X.CREATE_DATE,
X.UPDATE_DATE,
SYSDATE);
ELSE UPDATE EMP_T ESET
E.EMPNO X.EMPNO,
E.ENAME X.ENAME,
E.JOB X.JOB,
E.MGR X.MGR,
E.HIREDATE X.HIREDATE,
E.SAL X.SAL,
E.COMM X.COMM,
E.DEPTNO X.DEPTNO,
E.CREATE_DATE X.CREATE_DATE,
E.UPDATE_DATE X.UPDATE_DATE,
E.ETL_DATE SYSDATE
WHERE E.EMPNOX.EMPNO;
END IF ;
END LOOP;EXCEPTION WHEN OTHERS THENDBMS_OUTPUT.put_line(SQLERRM);END SP_EMP_UPDATE;
/
调用存储过程
BEGINSP_EMP_UPDATE(TO_DATE(20230729 00:00:00,yyyymmdd hh24:mi:ss),TO_DATE(20230729 23:59:59,yyyymmdd hh24:mi:ss));
END;SELECT * FROM EMP_T;
ORACEL 独有的 增量更新 merge into
MERGE INTO 目标表
USING (增量数据的查询结果集)
ON (匹配字段)
WHEN MATCHED THEN UPDATE SET -- UPDATE 和 SET 之间不需要加表名
WHEN NOT MATCHEDTHEN INSERT VALUES -- INSERT 和 VALUES 之间 不需要加 表名
merge into案例
CREATE OR REPLACE PROCEDURE SP_MERGEINTO_EMP
IS
BEGINMERGE INTO EMP_T T
USING (
SELECT
S.EMPNO,
S.ENAME,
S.JOB,
S.MGR,
S.HIREDATE,
S.SAL,
S.COMM,
S.DEPTNO,
S.CREATE_DATE,
S.UPDATE_DATE
FROM EMP_S S
) E -- 查询源表的结果集
ON (T.EMPNOE.EMPNO)
WHEN MATCHED THENUPDATE SET
T.ENAME E.ENAME,
T.JOB E.JOB,
T.MGR E.MGR,
T.HIREDATE E.HIREDATE,
T.SAL E.SAL,
T.COMM E.COMM,
T.DEPTNO E.DEPTNO,
T.CREATE_DATE E.CREATE_DATE,
T.UPDATE_DATE E.UPDATE_DATE,
T.ETL_DATE SYSDATE
WHEN NOT MATCHED THENINSERT (T.EMPNO,T.ENAME,T.JOB,T.MGR,T.HIREDATE,T.SAL,T.COMM,T.DEPTNO,T.CREATE_DATE,T.UPDATE_DATE,T.ETL_DATE)VALUES(E.EMPNO,E.ENAME,E.JOB,E.MGR,E.HIREDATE,E.SAL,E.COMM,E.DEPTNO,E.CREATE_DATE,E.UPDATE_DATE,SYSDATE );EXCEPTION WHEN OTHERS THEN ROLLBACK;DBMS_OUTPUT.PUT_LINE(SQLERRM);END SP_MERGEINTO_EMP;
调用
BEGINSP_MERGEINTO_EMP();
END;SELECT * FROM EMP_T;