Позиция Oracle Exception имеет значение? - PullRequest
0 голосов
/ 24 июня 2019

В функции 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, как и ожидалось.

Должна ли позиция исключения находиться в конце тела функции?

1 Ответ

3 голосов
/ 24 июня 2019

Структура блока PL / SQL определена в документации PL / SQL .Тело блока содержит один или несколько операторов, за которыми может следовать обработчик исключений.Конец секции EXCEPTIONS - это конец блока;после этого ничего не происходит.

Оператор RETURN является последней строкой регулярного тела.Так что это должно идти до блока ИСКЛЮЧЕНИЯ.

Вообще говоря, когда мы делаем что-то одним способом и получаем ошибку компиляции, затем делаем это другим способом и получаем ожидаемый результат, мы можем считать довольно большой ключ к пониманию правильного подхода.; -)

...