PLSQLで私は実行します:
truncate table MyOracleTableName;
commit work;
insert into MyOracleTablename
select a,b,c,trunc(sysdate) as datadate
from AnotherOracleTableName
where there is a ton of nasty criteria
union
select a,b,c,trunc(sysdate) as datadate from AnotherOracleTableName
where there is a ton of different nasty criteria;
commit work;
PLSQL Developer では、これにより 1 行が挿入されます。SSIS で SQL (セミコロンとコミット作業ステートメントなし) を実行すると、MyOracleTableName から主キー違反が発生します。
SSIS からの切り捨てが Oracle でコミットされていることを確認しました。
上記の SQL を PLSQL Developer で実行し、union を union all に置き換えると、2 行目が表示され、挿入は PK 違反で失敗します。重複を許可するユニオンの場合と同様です。
これは現在、MSDAORA を使用する SSIS 2005 パッケージの一部であり、問題なく動作します。私は現在、Oracle 用のネイティブ OLE DB プロバイダーを使用して SSIS 2008 で書き直しています。
新しい環境で MSDAORA を使用できません。これはドライバーの問題ですか。これらを複数のステートメントに分割して、2 番目のステートメントが MyOracleTableName にまだ含まれていないものだけを挿入する以外に回避策はありますか?
よろしく。