Функция в PL SQL (Oracle) Ошибка
CREATE OR REPLACE FUNCTION ComputeFreight(subtotal NUMBER)
RETURN NUMBER
IS
freightCharge NUMBER;
BEGIN
IF subtotal <= 15000 THEN
freightCharge := (subtotal * .10);
ELSIF subtotal > 15000 THEN
freightCharge := (subtotal * .15);
RETURN(freightCharge);
END IF;
END;
DECLARE
subtotal NUMBER := 15000;
BEGIN
DBMS_OUTPUT.PUT_LINE( ComputeFreight(subtotal) );
END;
Я не знаю, что не так с моим кодом, но он всегда показывает эту ошибку:
Неверное заявление
Неверное заявление
ORA-06503: PL/SQL: функция возвращена без значения ORA-06512: в "SQL_JQQXUMCMKFMRHRPZCYFNBEVTN.COMPUTEFREIGHT", строка 12 ORA-06512: в строке 4 ORA-06512: в "SYS.DBMS_SQL", строка 1721
2 ответа
Оператор возврата должен быть вне if-else
:
CREATE OR REPLACE FUNCTION ComputeFreight(subtotal NUMBER)
RETURN NUMBER
IS
freightCharge NUMBER;
BEGIN
IF subtotal <= 15000 THEN
freightCharge := (subtotal * .10);
ELSIF subtotal > 15000 THEN
freightCharge := (subtotal * .15);
END IF;
RETURN(freightCharge); -- here
END;
Если это является практикой для оператора IF, это нормально (с учетом предложенного GurV размещения оператора RETURN). Однако, если вам это действительно нужно в каком-то производственном процессе, вы можете упростить функцию и сделать ее более эффективной. Что-то вроде этого:
CREATE OR REPLACE FUNCTION ComputeFreight(subtotal NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN subtotal * (CASE WHEN subtotal <= 15000 THEN 0.1 ELSE 0.15 END);
END;