ablog

不器用で落着きのない技術者のメモ

MERGE文使っているのに ORA-00001 発生

MERGE 文使ってるのに ORA-00001 が発生する><

java.sql.SQLException: ORA-00001: unique constraint (SCOTT.EMP_UK) violated

id:niwanos

SelectInsertするときにInsert先のテーブルにPK、UK、FK、NOTNULL制約などが張ってあって
Insertに失敗すると結構ストレスがたまります。
そもそもどのレコードで失敗したのかわからなかったりすると
NotNullだったらSelectのWhereにIS NOT NULLかいて探したり
UKだったら GROUP HAVING 書いて探したり
かなりめんどくさいので10gからはdbms_errlogパッケージ使ってレコード特定してます。

SelectInsertのデバッグがメンドイとき - niwaのoracle日記

を参考にしたら、一意制約違反になったレコードを特定することができた。
これは便利!てか、これできないとツライ><

SQL> conn scott/tiger
Connected.
SQL> exec dbms_errlog.create_error_log('EMP');
SQL> merge into emp ...
SQL> select * from err$_emp;

...


Merging datasets with NULL values
を参考に SYS_OP_MAP_NONNULL 関数使って解決した。。。