使用常量的Pragma异常init

时间:2014-09-23 10:57:06

标签: oracle plsql

我将存储过程可能抛出的错误代码(通过调用raise_application_error)存储为常量。我的一个程序必须捕获另一个抛出的错误,我正在尝试使用pragma exception_init执行此操作。 它似乎只接受数字文字(因为它在我得到的错误信息中明确地说明了),但是能够不硬连接错误代码我会很好,否则我会存储在常量中。有没有一些解决方法,所以我可以达到和我写的一样:

  

pragma exception_init(myException,pkg_constants.error_not_null);

1 个答案:

答案 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