同步数据时调用插日志的sp

---------同步数据的时候调查日志的存储过程往日志表中记录信息

--比如:全量同步emp表的数据到 EMP_TAG 表,并记录日志信息
CREATE OR REPLACE PROCEDURE SP_EMP_TAG 
IS
      P_SP_NAME   VARCHAR2(40) := 'SP_EMP_TAG';
    P_SP_STATUS VARCHAR2(10) := 'RUNNING';
    P_S_DATE    DATE         := SYSDATE;
    P_F_DATE    DATE;
    P_SP_DESC   VARCHAR2(50) := '程序开始执行';
BEGIN
  ---程序开始执行的时候调用一遍插日志的sp
  SP_LOG_TAB(P_SP_NAME, P_SP_STATUS, P_S_DATE, P_F_DATE, P_SP_DESC);
  
  EXECUTE IMMEDIATE 'TRUNCATE TABLE EMP_TAG';
  
  INSERT INTO EMP_TAG
    (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, CHECK_DATE)
    SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO,SYSDATE
    FROM EMP;
    
  COMMIT; 
  
  --P_SP_NAME   VARCHAR2(40) := 'SP_EMP_TAG';
  P_SP_STATUS := 'FINISHED';
  --P_S_DATE    DATE         := SYSDATE;
  P_F_DATE    := SYSDATE;
  P_SP_DESC   := '程序执行结束';
  --同步数据的操作走完后,再调用一遍插日志的sp,再插入一遍信息
  SP_LOG_TAB(P_SP_NAME, P_SP_STATUS, P_S_DATE, P_F_DATE, P_SP_DESC);
END;

--测试一下
SELECT * FROM EMP_TAG;

BEGIN
  SP_EMP_TAG;
END;

SELECT * FROM LOG_TAB L  WHERE L.SP_NAME = 'SP_EMP_TAG';


---根据两次插入日志表的中的该同步数据的sp的日志信息,来看一下整个sp花费的时间,来判断是否需要进行性能优化

---小练习一把:增量同步emp表中的数据到 emp_tag 表,并记录每一步的日志信息


--日志表有了,插日志的sp也有了

--建表(表有了),建同步数据的sp

CREATE OR REPLACE PROCEDURE SP_EMP_TAG_CURSOR
IS
    CURSOR C_EMP_TAG 
  IS
  SELECT  empno, 
          ename, 
          job, 
          mgr, 
          hiredate, 
          sal, 
          comm, 
          deptno
  FROM EMP;  
  SYS_DATE DATE := SYSDATE;  
  CT NUMBER; 
   
  --日志表中所需要的信息
  P_SP_NAME   VARCHAR2(40) := 'SP_EMP_TAG_CURSOR';
  P_SP_STATUS VARCHAR2(10) := 'RUNNING';
  P_S_DATE    DATE         := SYSDATE; --=2020/9/26 15:53:20
  P_F_DATE    DATE;
  P_SP_DESC   VARCHAR2(50) := '程序开始执行';
  
BEGIN
  --记录开始时间
  SP_LOG_TAB(P_SP_NAME, P_SP_STATUS, P_S_DATE, P_F_DATE, P_SP_DESC);
  
  FOR X IN C_EMP_TAG LOOP
    SELECT COUNT(*)
    INTO CT
    FROM EMP_TAG T
    WHERE T.EMPNO = X.EMPNO;
    
    IF CT = 1 THEN
      UPDATE EMP_TAG T SET T.ENAME       = X.ENAME,
                           T.job         = X.JOB, 
                           T. mgr        = X.MGR, 
                           T.hiredate    = X.HIREDATE, 
                           T.sal         = X.SAL, 
                           T.comm        = X.COMM, 
                           T.deptno      = X.DEPTNO,
                           T.CHECK_DATE  = SYS_DATE
                    WHERE  T.EMPNO       = X.EMPNO;
    ELSIF CT = 0 THEN
      INSERT INTO EMP_TAG(EMPNO,
                          ENAME,
                          JOB,
                          MGR,
                          HIREDATE,
                          SAL,
                          COMM,
                          DEPTNO,
                          CHECK_DATE)
                  VALUES (X.EMPNO,
                          X.ENAME,
                          X.JOB,
                          X.MGR,
                          X.HIREDATE,
                          X.SAL,
                          X.COMM,
                          X.DEPTNO,
                          SYS_DATE);
    END IF;
  END LOOP;
  
  --P_SP_NAME   VARCHAR2(40) := 'SP_EMP_TAG_CURSOR';
  P_SP_STATUS  := 'RUNNING';
  --P_S_DATE    DATE         := SYSDATE;
  P_F_DATE    := SYSDATE;
  P_SP_DESC    := '数据同步完成';
  
  SP_LOG_TAB(P_SP_NAME, P_SP_STATUS, P_S_DATE, P_F_DATE, P_SP_DESC);
  
  COMMIT;
  
  FOR X IN 1 .. 50000 LOOP
    SP_EMP_M_MERGE;
  END LOOP;
  
   --P_SP_NAME   VARCHAR2(40) := 'SP_EMP_TAG_CURSOR';
  P_SP_STATUS  := 'FINISHED';
  --P_S_DATE    DATE         := SYSDATE;
  P_F_DATE    := SYSDATE;
  P_SP_DESC    := '提交完成';
  SP_LOG_TAB(P_SP_NAME, P_SP_STATUS, P_S_DATE, P_F_DATE, P_SP_DESC);
  
END;

--测试一下
BEGIN
  SP_EMP_TAG_CURSOR;
END;

SELECT * FROM EMP_TAG;

SELECT * FROM LOG_TAB;

TRUNCATE TABLE LOG_TAB;


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值