...PROCEDURE...
.....
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || ' ' || SQLERRM);
RAISE_APPLICATION_ERROR(-20021, 'Attempted to add duplicate primary key into table A2PROD');
.....
结果:
-1 ORA-00001: unique constraint (SYSTEM.SYS_C004235) violated
我想将结果显示为:
-20021 ORA-20021 Attempted to add duplicate primary key into table A2PROD
我试图在raise_application_error函数之后放置DOPL但仍然无效。 我想提出一个应用程序错误,并获取错误消息和代码,将它们打印到oracle开发人员的输出控制台。
答案 0 :(得分:2)
我不完全确定我理解这个问题。如果DOPL
是dbms_output.put_line
的缩写,并且您希望SQLCODE
为-20021且SQLERRM
为“ORA-20021:尝试将重复的主键添加到表A2PROD” ,您需要将dbms_output.put_line
调用放在捕获自定义错误消息的异常处理程序中。当然,你也可以做类似
WHEN dup_val_on_index
THEN
l_err_code := -20021;
l_err_msg := 'Attempted to add duplicate primary key into table A2PROD';
dbms_output.put_line( l_err_code || ' ' || l_err_msg );
raise_application_error( l_err_code, l_err_msg );
END;
答案 1 :(得分:0)
是否从另一个程序调用了发布过程?或者你是以其他方式运行它?
RAISE_APPLICATION_ERROR将异常号及其消息传递给调用程序。那么 做什么呢?例如,如果它有一个糟糕的异常处理程序,就像这样......
your_proc_here(p_new_id=>1);
exception
when others then
null;
end;
...你永远不会看到-20021错误,只是DBMS_OUTPUT输出。