zoukankan      html  css  js  c++  java
  • 利用merge优化

    create table a1(TP_END_DATE NUMBER,WK_END_DATE NUMBER,
    MTH_START_DATE NUMBER,
    MTH_END_DATE NUMBER,
    TIME_PERD_START_DATE NUMBER);
    
    create table a2(TP_END_DATE DATE ,WK_END_DATE DATE,MTH_START_DATE DATE,MTH_END_DATE DATE,DAY_DATE DATE) ;
    
    
    SQL> select * from a1;
    
    TP_END_DATE WK_END_DATE MTH_START_DATE MTH_END_DATE TIME_PERD_START_DATE
    ----------- ----------- -------------- ------------ --------------------
       19990101    19990101       19990101	   19990101		29990101
    
    SQL> select * from a2;
    
    TP_END_DA WK_END_DA MTH_START MTH_END_D DAY_DATE
    --------- --------- --------- --------- ---------
    01-JAN-99 01-JAN-99 01-JAN-99 01-JAN-99 01-JAN-99
    
    
    BEGIN
    
    Update  ADWGU_DICFR.DICFR_ORDR_CUT_FCT a
    Set
    TP_END_DATE =
     ( select TO_NUMBER(TO_CHAR((TP_END_DATE),'YYYYMMDD')) from CAL_MASTR_DIM b 
    where a.TIME_PERD_START_DATE= TO_NUMBER(TO_CHAR((b.DAY_DATE),'YYYYMMDD')));
    
    Update ADWGU_DICFR.DICFR_ORDR_CUT_FCT a
    Set
    WK_END_DATE = 
    ( select TO_NUMBER(TO_CHAR((WK_END_DATE),'YYYYMMDD') from CAL_MASTR_DIM b where
     a.TIME_PERD_START_DATE= TO_NUMBER(TO_CHAR((b.DAY_DATE),'YYYYMMDD')));
    
    Update  ADWGU_DICFR.DICFR_ORDR_CUT_FCT a
    Set
    MTH_START_DATE = 
    ( select TO_NUMBER(TO_CHAR((MTH_START_DATE),'YYYYMMDD') from CAL_MASTR_DIM b where 
    a.TIME_PERD_START_DATE= TO_NUMBER(TO_CHAR((b.DAY_DATE),'YYYYMMDD')));
    
    Update  ADWGU_DICFR.DICFR_ORDR_CUT_FCT a
    Set
    MTH_END_DATE = 
    ( select TO_NUMBER(TO_CHAR((MTH_END_DATE),'YYYYMMDD') from CAL_MASTR_DIM b where 
    a.TIME_PERD_START_DATE= TO_NUMBER(TO_CHAR((b.DAY_DATE),'YYYYMMDD')));
    
    COMMIT;
    
    END;
    /
    
    
    改为merge:
    merge into a1 a
    using a2 b
    on (a.TIME_PERD_START_DATE = TO_NUMBER(TO_CHAR((b.DAY_DATE), 'YYYYMMDD')))
    WHEN MATCHED THEN
      UPDATE
         SET a.TP_END_DATE = TO_NUMBER(TO_CHAR((b.TP_END_DATE), 'YYYYMMDD')),
             a.WK_END_DATE = TO_NUMBER(TO_CHAR((b.WK_END_DATE),'YYYYMMDD')),
              a.MTH_START_DATE = TO_NUMBER(TO_CHAR((b.MTH_START_DATE),'YYYYMMDD')),
               a.MTH_END_DATE = TO_NUMBER(TO_CHAR((b.MTH_END_DATE),'YYYYMMDD'))
  • 相关阅读:
    markown 画图
    C++ 结构体指针
    C++指针详解
    C++ 中类对象与类指针的区别
    Java面向对象㈠ -- 封装
    path和classpath
    "System.Web" 中不存在类型或命名空间
    ASP.NET 后台不识别ASPX中的控件
    asp.net中的<%%>形式的详细用法实例讲解
    ASP.NET前台JS与后台CS函数如何互相调用
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3798054.html
Copyright © 2011-2022 走看看