我将存储过程可能抛出的错误代码(通过调用raise_application_error)存储为常量。我的一个程序必须捕获另一个抛出的错误,我正在尝试使用pragma exception_init执行此操作。 它似乎只接受数字文字(因为它在我得到的错误信息中明确地说明了),但是能够不硬连接错误代码我会很好,否则我会存储在常量中。有没有一些解决方法,所以我可以达到和我写的一样:
pragma exception_init(myException,pkg_constants.error_not_null);
答案 0 :(得分:2)
您不能在编译指示中使用包常量或任何变量。
您可以做的是在包中定义异常本身及其关联的pragma:
create package pkg_constants as
MyException exception;
error_not_null constant pls_integer := -20001;
pragma exception_init(myException, -20001);
end pkg_constants;
/
您仍然需要重复错误编号,但至少只能在同一个文件中。然后,您可以在处理程序中引用该包定义的异常,而无需重新声明它:
exception
when pkg_constants.MyException then
...
例如:
set serveroutput on
begin
raise_application_error(pkg_constants.error_not_null, 'Threw it');
exception
when pkg_constants.MyException then
dbms_output.put_line('Caught it');
raise;
end;
/
Error report -
ORA-20001: Threw it
ORA-06512: at line 6
Caught it