次のような一括挿入操作からエラーをキャッチしています。
begin
--bulk insert
forall i in v_data.first .. v_data.last save exceptions
insert into my_filter_table values v_data (i);
commit;
exception
-- catch and print the saved-up DML errors.
when X_DML_ERRORS then
declare
v_iteration number;
begin
dbms_output.put_line('');
dbms_output.put_line('DML Errors:');
for i in 1 .. SQL%BULK_EXCEPTIONS.count loop
v_iteration := SQL%BULK_EXCEPTIONS(i).error_index;
dbms_output.put_line('Iteration: '||v_iteration||' Message: '||
SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE));
end loop;
end;
end;
出力は次のようになります。
反復: 3 メッセージ: ORA-01400: () に NULL を挿入できません 反復: 4 メッセージ: ORA-02290: チェック制約 (.) 違反 繰り返し: 8 メッセージ: ORA-00001: 一意の制約 (.) に違反しています
エラー処理コードをテストしているので、エラーが発生しても問題ありません。問題は、Oracle のエラー メッセージに制約名が表示されないことです。つまり、表示されますcheck constraint (.) violated
が、違反したチェック制約がわかりません。
これで何が起こっているのか誰か知っていますか?
(Oracle バージョン 10.2)