我从这样的批量插入操作中捕获错误:
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
但没有告诉我我违反了哪个检查约束。
有谁知道这是怎么回事?
(甲骨文 10.2 版)