1
...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

我试图将 DOPL 放在 raise_application_error 函数之后,但仍然无法正常工作。我想引发应用程序错误并获取错误消息和代码以将它们打印到 oracle 开发人员的输出控制台。

4

2 回答 2

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;
于 2012-04-16T15:48:50.857 回答
0

发布的过程是从另一个过程调用的吗?还是您以其他方式运行它?

RAISE_APPLICATION_ERROR 将异常号及其消息传递给调用程序。那么这异常有什么作用呢?例如,如果它有一个糟糕的异常处理程序,像这样......

     your_proc_here(p_new_id=>1);
exception
    when others then
        null;
end;

...您永远不会看到 -20021 错误,只会看到 DBMS_OUTPUT 输出。

于 2012-04-16T15:48:15.950 回答