在oracle中提出异常和重新加注有什么区别

时间:2015-03-23 08:56:10

标签: oracle exception

在oracle中,什么是提出异常和重新引用异常之间的差异'用简单的例子请'和异常和普通if语句之间的差异是什么,如果它发生了打印错误?

2 个答案:

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