0

我在两个数据库中有两个表,其中一个是从另一个表中复制的(通过 informatica 映射,我不能通过简单的插入替换它),所以我需要查看每一列是否具有与原始表相同的数据。如果我想测试一列,我会:

Select column1
from 
table1
minus
Select column1
from 
table2@dblink

如果我对具有 100 列的表的每一列都执行此操作,那将是浪费时间。我试过这个来比较:

Select column1,column2,.....column N
from 
table1
minus
Select column1,column2,.....column N
from 
table2@dblink

但是,即使一列不匹配,它也会返回所有值。所以我想知道最好的方法是什么,以便我的脚本比较两个表并返回不具有相同值的列。

我想到的另一个标准是:

select 
(case when T.column1 <> P.column1 then T.id else null),
...
...
...
from
table1 T,
schema.table1@dblink P
where
T.id=P.id
and T.date>='01-DEC-2012'
and T.date<='10-DEC-2012'
and P.date>='01-DEC-2012'
and P.date<='10-DEC-2012';

我曾经使用 date 功能来提高性能。

4

2 回答 2

0

使用 oracle except 关键字

Select * from tableA
except 
Select * from tableb

这将为您提供 a 而不是 b 中存在的所有行

select * from tableb
except 
select * from tablea

这将为您提供 b 而不是 a 中存在的所有行

于 2013-01-30T15:41:30.840 回答
-1

甚至不打扰做测试。截断 Table_B 并从 Table_A 插入到 Table_B。如果您不希望 Table_B 更改,请将其设为只读。

于 2013-01-30T19:10:35.367 回答