[Oracle]INSERT時のKEY違反,一意制約違反,指定制度より大きな値,の理由を調べる

Oracle

概要

INSERT文実行時に「ORA-00001: 一意制約(xxxxxxx)に反しています」となった場合,どんなデータで実際エラーとなっているのか原因を調査したい。

「ORA-01438: この列に許容される指定精度より大きな値です」の理由も調べられる

調査方法

詳細なエラー内容を記録する表を作ります

以下のSQL文で生成します

 exec dbms_errlog.create_error_log('hogehoge');

hogehoge は 追加先の問題となっているテーブル名です。

err$_hogehoge という表が自動生成されます。

問題となっているINSERT文のSQLの末尾に LOG ERRORS REJECT LIMIT UNLIMITED を追加し実行

INSERT 〇〇〇 SELECT ●●● LOG ERRORS REJECT LIMIT UNLIMITED;

文字を追加したら,SQLを実行する。そしてエラーとなれば・・・

※ エラーとなっても他の成功した行は追加されているので注意。(コミットしてなければ,ロールバックで戻すことはできる)

エラーログの内容を見る

SELECT * FROM err$_hogehoge

このSQLで履歴をみます。どんなデータを追加しようとした時にエラーとなったかがわかります。

プロパティ

Oracle 19.8

コメント

スポンサーリンク
タイトルとURLをコピーしました