如何定义时间区间?

0 #BI&大数据 流苏姑娘8个月前

例如我想往一个新的表里传视图中的数据,而这个视图数据量特别大,视图里的有2000年到2020年的数据,所以我想每次都从视图里抽取三个月的数据进新表中,分段完成数据的插入,整个过程用存储过程来实现,那我这个时间区间该如何定义呢?整个逻辑怎么来写呢?

回答 3 浏览 231
流苏姑娘 8个月前

我的昵称呢

Spark.sun 8个月前

是用存储过程实现么?

流苏姑娘 8个月前

是的

Spark.sun 8个月前
--简单方法
CREATE OR REPLACE PROCEDURE SP_EMPB(P_START_DATE VARCHAR2,
                                    P_END_DATE VARCHAR2) IS
  V_START_DATE DATE := TO_DATE(P_START_DATE, 'YYYY-MM-DD HH24:MI:SS');
  V_END_DATE   DATE := TO_DATE(P_END_DATE, 'YYYY-MM-DD HH24:MI:SS');
BEGIN
  DELETE FROM EMPEMP
   WHERE EMPNO IN (SELECT E.EMPNO
                     FROM EMP E
                    WHERE E.LAST_UPDATE_DATE >= V_START_DATE
                      AND E.LAST_UPDATE_DATE < V_END_DATE);
  INSERT INTO EMPEMP A
    (A.EMPNO,
     A.ENAME,
     A.JOB,
     A.MGR,
     A.HIREDATE,
     A.SAL,
     A.COMM,
     A.DEPTNO,
     A.LAST_UPDATE_DATE)
    SELECT E.EMPNO,
           E.ENAME,
           E.JOB,
           E.MGR,
           E.HIREDATE,
           E.SAL,
           E.COMM,
           E.DEPTNO,
           SYSDATE
      FROM EMP E
     WHERE LAST_UPDATE_DATE >= V_START_DATE
       AND LAST_UPDATE_DATE < V_END_DATE;
  COMMIT;
END;

--调用(把视图内数据2000年到2020年,每三个月调用一次)
BEGIN
  SP_EMPB('2017-04-05 00:00:00','2017-04-06 00:00:00');
  END;
wudaxin 8个月前

不能自动化?每次调用还要输时间,有没有智能的方法

Spark.sun 回复 wudaxin 8个月前

在调用存储过程的时候定义个变量,写个循环,把写死的值改成变量

Spark.sun 回复 wudaxin 8个月前

更完美的话,要加更新日志表,日志表里记录要更新的日期段,再加游标遍历日志表进行更新。