为啥我们需要在最后写 WHEN OTHERS THEN 异常 - Oracle PLSQL [关闭]
Posted
技术标签:
【中文标题】为啥我们需要在最后写 WHEN OTHERS THEN 异常 - Oracle PLSQL [关闭]【英文标题】:Why we need to write WHEN OTHERS THEN exception at the last - Oracle PLSQL [closed]为什么我们需要在最后写 WHEN OTHERS THEN 异常 - Oracle PLSQL [关闭] 【发布时间】:2019-09-24 18:16:17 【问题描述】:我知道在 Oracle PLSQL 异常处理中,WHEN OTHERS THEN 异常需要写在所有异常的末尾,而不管用户定义的还是 oracle 预定义的。 Oracle 文档不足以回答“如何”部分。 请详细说明。 我找到的链接:- https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00708 有用的 sn-p 来自同一个:- https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00708
【问题讨论】:
【参考方案1】:“如何”部分?您的意思是说“为什么”部分吗?
原因如下:
SQL> declare
2 l_ename emp.ename%type;
3 begin
4 -- this raises TOO-MANY-ROWS
5 select ename
6 into l_ename
7 from emp
8 where deptno = 10;
9 exception
10 when others then
11 dbms_output.put_line('others');
12 when too_many_rows then
13 dbms_output.put_line('too many rows');
14 end;
15 /
when others then
*
ERROR at line 10:
ORA-06550: line 10, 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
SQL>
【讨论】:
【参考方案2】:根据您的链接,WHEN OTHERS THEN
是可选的,这意味着您可以包含它,但您不必这样做。
【讨论】:
是的,我知道这是可选的,我们也可以排除它。但是当我们写任何异常的时候,比如说当下面没有找到数据的时候,其他的时候就不允许了。我在问为什么不允许? 将异常子句视为 case 语句的特殊形式。那么“当其他人”对应于“其他”条件。现在图像试图写“Case else...when...”以上是关于为啥我们需要在最后写 WHEN OTHERS THEN 异常 - Oracle PLSQL [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
java jsp页面用<c:choose><c:when><c:others>写的逻辑没有显示,该怎么找错
在使用oracle创建存储过程部分代码: EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE;