Insert Into TB_FLG_V2_HS
select SEQ_TB_FLG_V2_HS.Nextval,FLGNUM,ACTYP,ACNUM,FLGFRTO,FLGFRCD,FLGFROM,FLGTOCD,FLGTO,FLGETD,FLGETA,FLGATD,FLGATA,
ACPARK,AIRPARK,NEWTIME,FLGUPTD,MAINTAIN,REMRK,COMPANY,FLGSTD,FLGSTA,AIRTYP,ACDPT
From TB_FLG_V2 t 
Where FLGNUM||ACTYP||ACNUM||FLGFRTO||FLGFRCD||FLGTOCD||
to_char(FLGETD,'yyyymmddHH24MISS')||
to_char(FLGETA,'yyyymmddHH24MISS')||
to_char(FLGATD,'yyyymmddHH24MISS')||
to_char(FLGATA,'yyyymmddHH24MISS')||
ACPARK||AIRPARK||NEWTIME||MAINTAIN||COMPANY||ACDPT
Not In 
(
Select FLGNUM||ACTYP||ACNUM||FLGFRTO||FLGFRCD||FLGTOCD||
to_char(FLGETD,'yyyymmddHH24MISS')||
to_char(FLGETA,'yyyymmddHH24MISS')||
to_char(FLGATD,'yyyymmddHH24MISS')||
to_char(FLGATA,'yyyymmddHH24MISS')||
ACPARK||AIRPARK||NEWTIME||MAINTAIN||COMPANY||ACDPT
From TB_FLG_V2_HS 
Where to_char(FLGUPTD,'yyyy-mm-dd')=to_char(Sysdate,'yyyy-mm-dd')
)
===========================================================
TB_FLG_V2:主数据表
TB_FLG_V2_HS:历史数据表它的主要目的是:只要在TB_FLG_V2表中有不存在于TB_FLG_V2_HS表中的数据,就把它保存到TB_FLG_V2_HS表.
因为TB_FLG_V2表的数据会经常变更,如果TB_FLG_V2表有数据发生了变更,就把变更的数据保存到TB_FLG_V2_HS历史表里面.
未发生的变更的数据,就不能保存到历史数据表.
相当于一个增量备份!谢谢!

解决方案 »

  1.   

    Select FLGNUM,ACTYP,ACNUM,FLGFRTO,FLGFRCD,FLGTOCD,
    to_char(FLGETD,'yyyymmddHH24MISS'),
    to_char(FLGETA,'yyyymmddHH24MISS'),
    to_char(FLGATD,'yyyymmddHH24MISS'),
    to_char(FLGATA,'yyyymmddHH24MISS'),
    ACPARK,AIRPARK,NEWTIME,MAINTAIN,COMPANY,ACDPT
    From TB_FLG_V2 t
    minus
    Select FLGNUM,ACTYP,ACNUM,FLGFRTO,FLGFRCD,FLGTOCD,
    to_char(FLGETD,'yyyymmddHH24MISS'),
    to_char(FLGETA,'yyyymmddHH24MISS'),
    to_char(FLGATD,'yyyymmddHH24MISS'),
    to_char(FLGATA,'yyyymmddHH24MISS'),
    ACPARK,AIRPARK,NEWTIME,MAINTAIN,COMPANY,ACDPT
    From TB_FLG_V2_HS
    Where to_char(FLGUPTD,'yyyy-mm-dd')=to_char(Sysdate,'yyyy-mm-dd')
    这个查询找出TB_FLG_V2表在TB_FLG_V2_HS表中没有的数据,作为一个子表写个insert吧
      

  2.   

    这样?Insert Into TB_FLG_V2_HS
    select SEQ_TB_FLG_V2_HS.Nextval,FLGNUM,ACTYP,ACNUM,FLGFRTO,FLGFRCD,FLGTOCD,
    to_char(FLGETD,'yyyymmddHH24MISS'),
    to_char(FLGETA,'yyyymmddHH24MISS'),
    to_char(FLGATD,'yyyymmddHH24MISS'),
    to_char(FLGATA,'yyyymmddHH24MISS'),
    ACPARK,AIRPARK,NEWTIME,MAINTAIN,COMPANY,ACDPT
    From TB_FLG_V2 t
    minus
    Select FLGNUM,ACTYP,ACNUM,FLGFRTO,FLGFRCD,FLGTOCD,
    to_char(FLGETD,'yyyymmddHH24MISS'),
    to_char(FLGETA,'yyyymmddHH24MISS'),
    to_char(FLGATD,'yyyymmddHH24MISS'),
    to_char(FLGATA,'yyyymmddHH24MISS'),
    ACPARK,AIRPARK,NEWTIME,MAINTAIN,COMPANY,ACDPT
    From TB_FLG_V2_HS
    Where to_char(FLGUPTD,'yyyy-mm-dd')=to_char(Sysdate,'yyyy-mm-dd')还是先得把minus的结果放到一张临时表里面,然后在insert到TB_FLG_V2_HS表?多谢!!
      

  3.   

    not in太慢
    直接改为where关联即可