如何从raise_application_error()获取信息?

时间:2012-04-16 15:39:56

标签: oracle exception stored-procedures plsql

...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开发人员的输出控制台。

2 个答案:

答案 0 :(得分:2)

我不完全确定我理解这个问题。如果DOPLdbms_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输出。