为啥我们需要在最后写 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

oracle when 和 then怎么用!!!

java jsp页面用<c:choose><c:when><c:others>写的逻辑没有显示,该怎么找错

在oracle中要谨慎使用when others then

在使用oracle创建存储过程部分代码: EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE;

PL/SQL 中的“When Others Then Null”有啥不好?

11th 最后的致意