0

2 つのデータベースに 2 つのテーブルがあり、そのうちの 1 つが (インフォマティカ マッピングを介して、単純な挿入で置き換えることはできません) 他のテーブルからコピーされるため、すべての列に元のテーブルと同じデータがあるかどうかを確認する必要があります。1 つの列をテストする場合は、次のようにします。

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

しかし、1 つの列が一致しなくても、すべての値が返されました。そのため、スクリプトが 2 つのテーブルを比較し、同一の値を持たない列を返すようにするには、これを行う最善の方法は何だろうと考えていました。

私の頭に浮かぶ別の基準は次のとおりです。

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';

以前は、パフォーマンスを向上させるために機能を日付付けしていました。

4

2 に答える 2

0

oracle except キーワードを使用する

Select * from tableA
except 
Select * from tableb

これにより、bではなくaに存在するすべての行が得られます

select * from tableb
except 
select * from tablea

これにより、aではなくbに存在するすべての行が得られます

于 2013-01-30T15:41:30.840 に答える
-1

テストを行うことさえ気にしないでください。Table_B を切り捨て、Table_A から Table_B に挿入します。Table_B を変更したくない場合は、読み取り専用にします。

于 2013-01-30T19:10:35.367 に答える