这将作为输出给出什么

时间:2013-10-31 15:35:15

标签: oracle

declare
  v number;
begin

  select 1 
    into v 
    from dual 
   where 1=2;

exception
  when others then 
    dbms_output.put_line('A');
  when no_data_found   then
    dbms_output.put_line('B');
end;

执行此操作时,我收到一个错误,但我已经在某处读过它,在异常时,如果放在其他位置,如果放在第一位将始终执行以抑制其他类型的异常。我在接受采访时被问到这个问题而且我是如上所述。有人可以确认

3 个答案:

答案 0 :(得分:1)

您将在11.2G中收到以下错误:

Error at line 1
ORA-06550: line 11, column 3:
PLS-00370: OTHERS handler must be last among the exception handlers of a block
ORA-06550: line 0, column 0:
PL/SQL: Compilation unit analysis terminated

您应始终将OTHER作为最后一个异常处理块

WHEN OTHERS子句用于捕获所有尚未由Named System Exceptions和命名程序员定义的异常处理的剩余异常。

如果您的代码中只有WHEN OTHERS块,则"PL/SQL procedure successfully completed."将成为消息。因为永远不会遇到OTHER。 A其他人几乎总是一个BUG,除非紧接着是RAISE。异常块的要点是捕获您正在预期的异常条件,优雅地处理它们并继续。您应该只捕获您期望的异常并且可以做些什么。让其他人传播出来,这样你就可以发现它们(所以你看到了它们)

我的建议是“忽视其他人的时候”

答案 1 :(得分:0)

执行此代码块将引发异常PLS-00370(记录为here):

  

PLS-00370:OTHERS处理程序必须是块的异常处理程序中的最后一个

     

原因:在OTHERS处理程序之后出现一个或多个异常处理程序。但是,OTHERS处理程序必须是a中的最后一个处理程序   块或子程序,因为它充当所有异常的处理程序   没有具体命名。

     

操作:移动OTHERS处理程序,使其跟随所有特定的异常处理程序。

答案 2 :(得分:0)

你必须在最后一个地方留下OTHERS例外。 例如: 开始   某物 例外   那么DUP_VAL_ON_INDEX      做一点事 然后呢。等等    最后例外做某事 END;