2012-01-17 15 views
5

私には意味をなさないエラーがあります。エラーはかなり簡単です:存在しないように見える制約を参照するOracle固有の制約違反

ORA-00001: unique constraint (*schema*.*xyz_constraint*) violated 

しかし、私の混乱の原因は、そのような制約は存在しないようです。確かにテーブルには定義されていません。問題のDBには参照整合性がほとんど定義されておらず、データを挿入する特定のテーブルにはキーが定義されていません。何が価値があるために

、私はどこでも、データベース内の制約を見つけることができません。

select * 
    from all_constraints 
    where constraint_name like '%xyz_constraint%' 

は私が見渡せるてるものはありますか?ありがとう。

+6

SYSの観点から、今のところ、再びそれを見て試してみてください、Oracleはユニーク**制約**違反として報告されます。ですから、私は制約に加えてユニークなインデックスを探すことを提案します。 –

答えて

4

これは、制約が別のユーザーに属し、そのユーザーにアクセス権がない場合に発生します。

試みがなされた場合、このようなユニーク**インデックス**は、重複を持っているだろうと

+0

私はDBAの1人に従事しなければなりません。もちろん、私はスキーマへのSYSアクセス権を持っていません。何が起きているのかは興味深いでしょう。なぜなら、これは制約の問題がなくても2年以上前からプロットされていたからです。今日私は600エラーがあります。フィードバックをお寄せいただきありがとうございます;私はあなたに私が見つけたものを知らせます。 – Ickster

+0

@Ickster:私は原因を覚えていませんが、私はまったく同じ振る舞いをしていましたが、それは私の言ったことでした;-)とにかく、あなたの研究で幸運と詳細を楽しみにして、実際にあなたのケースであったもの – zerkms

+2

代わりに 'DBA_CONSTRAINTS'を使用してください。このビューにアクセスできる場合は、制約が存在する場合はそこに表示されます。 'SYS'は必ずしも必要ではありません。' SYSTEM'もアクセスします。 –

1

ほとんどの場合、スキーマオブジェクト名は大文字で格納されます。試してください。

select * 
from all_constraints 
where constraint_name like '%XYZ_CONSTRAINT%' 

通常、ORA-00001は重複する主キーに対して発生します。あなたはテーブルの上にそれを持っていないと確信していますか?

+0

実際に実行したクエリには、受信したエラーで返されたものと同じ名前の制約名が含まれていました。私はテーブル上にキーが定義されていないということは肯定的です。唯一の制約は、いくつかのフィールドのNOT NULL宣言です。 – Ickster

関連する問題