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