【问题标题】:The position of Oracle Exception matters?Oracle Exception 的位置很重要吗?
【发布时间】:2019-11-06 09:12:49
【问题描述】:

在下面的函数test2 中,如果我把RETURN V_VALUE; 放在后面 EXCEPTION子句,执行code2时,出现系统异常ORA-06503: Function returned without value错误。

CREATE OR REPLACE FUNCTION TEST2
    (P1 IN VARCHAR2)
RETURN NUMBER AS V_VALUE NUMBER;
BEGIN
    SELECT(
        SELECT 1/TO_NUMBER(P1)
        FROM DUAL
        )
    INTO V_VALUE
    FROM DUAL;

    --RETURN V_VALUE; 

    EXCEPTION   
    WHEN OTHERS THEN
      RETURN NULL;  

    RETURN V_VALUE; --if I put RETURN clause after EXCEPTION, "ORA-06503: Function returned without value" raised
END;
/

SELECT TEST2('1') FROM DUAL;

但是,当我将 RETURN V_VALUE; 放在 EXCEPTION 子句之前时,select 语句会按预期返回 1

Exception的位置应该在函数体的末尾吗?

【问题讨论】:

    标签: sql oracle exception plsql return


    【解决方案1】:

    PL/SQL 块的结构在the PL/SQL documentation 中定义。块的主体包括一个或多个语句,可选地后跟一个异常处理程序。 EXCEPTIONS 部分的结尾是块的结尾;之后什么都没有发生。

    RETURN 语句是常规正文的最后一行。所以它必须在 EXCEPTION 块之前。

    一般来说,当我们以一种方式做一件事并遇到编译错误时,然后以不同的方式做这件事并获得预期的结果,我们可以认为这是一个关于采取什么正确方法的相当大的线索;-)

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多