2016-05-17 61 views
1

我有一個表X和表Y.表Y是歷史表。無論何時在表X中插入,更新或刪除記錄時,它都會插入到歷史記錄表Y中。現在我試圖用缺失記錄更新歷史記錄表。爲此,我寫了一個減法查詢以獲得差異。我必須將所有這些記錄插入到歷史記錄表中。我試圖使用「合併」和其他形式的插入語句,但無法獲得確切的輸出。插入歷史表 - oracle SQL - PL/SQL

EX:

表X

A   B   C 
EMP NO EMP NAME EMP ADD 

數據表Y

A   B   C  D  E  F 
EMP NO EMP NAME EMP ADD st dt end dt indicator 

雖然插入我必須使用附加的三列作爲具有日期和指示器如表X不具有的值這些列。請在出現差異時幫助我爲此歷史記錄表寫入插入內容。

+0

向我們展示您的存儲過程 –

回答

1

有幾種不同的方法可以做到這一點。一種是使用not exists

insert into tabley (Y, A, B, C, EMPNO, EMPNAME, EMPADD) 
select X, A, B, C, EMPNO, EMPNAME, EMPADD 
from tablex x 
where not exists (
    select 1 
    from tabley 
    where tabley.y = x.X 
    ) 

只要確保你定義了相同數量的列用於插入你的選擇做。根據其他領域的來源,您可能也能夠提供 - 取決於您的樣本數據和預期結果。

順便說一句,這假設xtablex是您的唯一標識符。如果不是,則需要更新上面的where條件。

0

您將需要創建表X缺失列中的數據(格式提高可讀性):

insert into tabley(empno 
       , empname 
       , empadd 
       , st_dt 
       , end_dt 
       , indicator) 
select empno 
    , empname 
    , empadd 
    , to_date(some_date_you_create) 
    , to_date(another_date_or null) 
    , (whatever_starting_indicator_value_is_allowed) 
    from tablex x 
where not exists (select 1 
        from tabley y 
        where x.empno = y.empno); 

本質上講,你必須與你決定一些事任意創建缺失值。這也假設empno是一個獨特的關鍵價值。