2012-04-16 24 views
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'); 
..... 

结果:如何从raise_application_error()获取信息?

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

回答

0

是否从另一个程序调用了发布的过程?或者你以其他方式运行它?

RAISE_APPLICATION_ERROR将异常号及其消息传递给调用程序。那么与异常做什么?举例来说,如果它有一个可怜的异常处理程序,像这样...

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

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

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;