概要
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
コメント