Oracle Exception的位置重要吗?

时间:2019-06-24 14:24:56

标签: sql oracle exception plsql return

在下面的函数test2中,如果我将RETURN V_VALUE;放在后面 EXCEPTION子句,执行代码2时,发生系统异常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的位置应该在函数主体的末尾吗?

1 个答案:

答案 0 :(得分:3)

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

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

通常来说,当我们以一种方式执行某件事并获得编译错误,然后以另一种方式执行某件事并获得预期的结果时,我们可以认为,对于采用哪种正确的方法而言,这是一个很大的线索;-)