我将存储过程可能抛出的错误代码(通过调用 raise_application_error)存储为常量。我的一个程序必须捕获另一个程序抛出的错误,我正在尝试使用 pragma exception_init 来执行此操作。看起来它只接受数字文字(因为它在我收到的错误消息中明确说明了这一点),但是如果能够不硬连线我存储在常量中的错误代码,那就太好了。是否有一些解决方法,以便我可以实现与我写的相同的效果:
pragma exception_init(myException, pkg_constants.error_not_null);
您不能在编译指示中使用包常量或任何变量。
您可以做的是在包中定义异常本身及其关联的编译指示:
create package pkg_constants as
MyException exception;
error_not_null constant pls_integer := -20001;
pragma exception_init(myException, -20001);
end pkg_constants;
/
Run Code Online (Sandbox Code Playgroud)
您仍然必须重复错误号,但至少只能在同一个文件中。然后,您可以在处理程序中引用该包定义的异常,而无需重新声明它:
exception
when pkg_constants.MyException then
...
Run Code Online (Sandbox Code Playgroud)
例如:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |