答案 0 :(得分:1)
引发异常与重新引发异常之间的一个重要区别是,使用RAISE;
保留原始错误消息,例如(这是一个人为的例子,希望你能得到这个想法):
create table t (x varchar2(1));
begin
insert into t values ('aa');
exception
when others then
dbms_output.put_line(sqlerrm);
raise;
end;
ORA-12899: value too large for column "XXSPS"."T"."X" (actual: 2, maximum: 1)
VS
declare
value_too_large exception;
pragma exception_init (value_too_large, -12899);
begin
insert into t values ('aa');
exception
when value_too_large then
raise value_too_large;
end;
ORA-12899: value too large for column (actual: , maximum: )
在第二种情况下,我们引发“value_too_large”异常,该异常没有引用回到具有列名或长度信息的原始异常。
答案 1 :(得分:0)
如果你在异常部分的异常处理程序中,你可以通过发出一个非限定的RAISE语句重新引发“让你到那里”的异常,如下所示:
RAISE; 由于未指定异常,PL / SQL运行时引擎会重新引发当前异常(其错误号将通过调用SQLCODE函数返回)。
以下是以这种方式使用raise的示例:
EXCEPTION
WHEN OTHERS
THEN
send_error_to_pipe (SQLCODE);
RAISE;
END;