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'))
  • 相关阅读:
    java的运行机制及初步相关配置(jdk)
    观察者模式
    Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)
    MyBatis—实现关联表查询
    Mybatis解决字段名与实体类属性名不相同的冲突
    Mybatis简化sql书写,别名的使用
    十八.模块
    十七.偏函数
    十六.装饰器
    十五.匿名函数
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352445.html
Copyright © 2011-2022 走看看