当前位置: 首页 > news >正文

PL/SQL增量同步

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.SAL=1000,S.UPDATE_DATE=SYSDATE WHERE S.EMPNO=7369;
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.EMPNO=X.EMPNO;IF V_COUNT=0 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.EMPNO=X.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.EMPNO=E.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;

http://www.lryc.cn/news/185081.html

相关文章:

  • C++——多态底层原理
  • asdTools-ReID热力图可视化
  • CSS学习笔记
  • linux操作命令
  • 猜数字游戏(Python)
  • 可视化模块
  • MyBatis insert标签
  • 扬尘监测:智能化解决方案让生活更美好
  • 【AI视野·今日NLP 自然语言处理论文速览 第四十五期】Mon, 2 Oct 2023
  • The little schemer 学习
  • yolov5+bytetrack算法在华为NPU上进行端到端开发
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-1】简介
  • BJT晶体管
  • ORACLE中SQL运算符的优先级
  • springboot和vue:十一、Axios网络请求的安装引入与使用、跨域问题解决(CORS)
  • 外汇天眼:真实记录,投资者在盗版MT4平台SCE Group上做交易的经历!
  • FFmpeg 命令:从入门到精通 | ffmpeg 命令视频录制
  • html 笔记:CSS
  • 【LeetCode - 每日一题】901. 股票价格跨度(23.10.07)
  • 第二证券:突发!A股T+0?刚刚,紧急回应!
  • ShardingSphereJDBC5.4.0支持Nacos配置(SpringCloud版)
  • 基于SSM的学院学生论坛系统的设计与实现
  • Unity记录5.4-地图-带种子的柏林噪声
  • 阅读论文:Label-Free Liver Tumor Segmentation
  • leetcode64 最小路径和
  • 金盘图书馆微信管理后台信息泄露漏洞 复现
  • nginx实现负载均衡(三)
  • Android---深入理解ClassLoader的加载机制
  • 超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告
  • Linux posix_spawn和fork的区别