2016-05-17 50 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是一个独特的关键价值。