0

SQLを使用して以下のテーブルをロードしようとしています。私の Ldirectory テーブルには、主キーとしてと の組み合わせがSYあり、このクエリを実行しようとしていますLIDENTIFIER

insert into S_User.LDIRECTORY (SY,LIDENTIFIER,ONAME,TELNUMBER) 
select  2013,D.CODE, D.NAME, D_YEAR.PHONE_NUMBER       
from    WHS.D   WHS.D_YEAR   
where   WHS.D.D_KEY=WHS.D_YEAR.D_KEY

私が受け取っているエラーは次のとおりです。

SQL Error ORA-00001 unique constraint violated

Cause:    An UPDATE or INSERT statement attempted to insert a duplicate key.
           For Trusted Oracle configured in DBMS MAC mode, you may see
           this message if a duplicate entry exists at a different level.
Action:   Either remove the unique restriction or do not insert the key.

この問題を解決するにはどうすればよいですか? 挿入中にSY列を主キー自体として扱うと思いますが、その列には同じ値が1つしかありません。

4

1 に答える 1

1

エラー メッセージには、違反した一意の制約の名前が示されます。問題の制約がテーブルで定義された他の一意の制約ではなく主キーであると仮定し、主キー制約が と の組み合わせで定義された複合制約であると仮定するSYLIDENTIFIER、クエリが重複した行を返すことを意味します。

実行中のクエリは、ハードコードされた 2013 の値を返しますSYD.CODEしたがって、結果に同じ行が 2 つある場合、制約に違反することが予想されます。D.CODE結果セット全体で一意であると確信していますか? オブジェクトの名前に基づいて推測するのは困難です (何Dを表しているのか、なぜ列D_YEARがあるのか​​わからないなど) が、1 つの行が複数の行にマップされる可能性PHONE_NUMBERがあると推測する傾向があります。結果に同じ値を持つ複数の行があるため、制約に違反しています。DD_YEARD.CODE

クエリが同じD.CODE値を持つ 2 つの行を返さないことが確実な場合は、DML エラー ログを使用して、制約に違反する行をエラー テーブルに書き込み、問題を分析できます。

于 2012-12-13T17:49:57.583 に答える