Проблема с SQL Функция & Case возвращает - PullRequest
0 голосов
/ 28 апреля 2020

Проще говоря, у меня есть таблица со столбцом IDSTAGE, содержащая число (от 1 до 5), и я пытаюсь создать функцию для получения этого числа и возврата описания. Вот что у меня есть:

FUNCTION STATUS_DESC_SF (p_idstage IN BB_BASKETSTATUS.IDSTAGE%TYPE)
RETURN VARCHAR2
AS
BEGIN
    CASE
        WHEN p_idstage = 1 THEN RETURN '1 - Order Submitted'
        WHEN p_idstage = 2 THEN RETURN '2 - Accepted, sent to shipping'
        WHEN p_idstage = 3 THEN RETURN '3 - Back-ordered'
        WHEN p_idstage = 4 THEN RETURN '4 - Cancelled'
        WHEN p_idstage = 5 THEN RETURN '5 - Shipped'
        ELSE RETURN 'Null'
    END CASE;
END STATUS_DESC_SF;

Когда я запускаю это и показываю ошибку, я получаю следующее для каждой строки, начинающейся с того, когда.

6/3      PLS-00103: Encountered the symbol "WHEN" when expecting one of
         the following:
         * & = - + ; < / > at in is mod remainder not rem
         <an exponent (**)> <> or != or ~= >= <= <> and or like like2
         like4 likec between || multiset member submultiset
         The symbol ";" was substituted for "WHEN" to continue.

Я выполнил задание усердие и дважды проверил мой синтаксис и, насколько я могу судить, я не сделал ничего плохого. Я подозреваю, что ему не нравится часть THEN RETURN, но это не то место, где появляется ошибка.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Попробуйте вместо этого:

RETURN CASE
    WHEN p_idstage = 1 THEN '1 - Order Submitted'
    WHEN p_idstage = 2 THEN '2 - Accepted, sent to shipping'
    WHEN p_idstage = 3 THEN '3 - Back-ordered'
    WHEN p_idstage = 4 THEN '4 - Cancelled'
    WHEN p_idstage = 5 THEN '5 - Shipped'
    ELSE 'Null'
END;

Регистр - это выражение

0 голосов
/ 28 апреля 2020

Таким образом, проблема заключалась в отсутствии точек с запятой в конце строк результата. В SQL они не нужны, но в функции PL SQL они есть.

Исправленный код:

FUNCTION STATUS_DESC_SF
    (p_idstage IN BB_BASKETSTATUS.IDSTAGE%TYPE)
    RETURN VARCHAR2
AS
BEGIN
    CASE
        WHEN p_idstage = 1 THEN RETURN '1 - Order Submitted';
        WHEN p_idstage = 2 THEN RETURN '2 - Accepted, sent to shipping';
        WHEN p_idstage = 3 THEN RETURN '3 - Back-ordered';
        WHEN p_idstage = 4 THEN RETURN '4 - Cancelled';
        WHEN p_idstage = 5 THEN RETURN '5 - Shipped';
        ELSE RETURN 'Null';
    END CASE;
END;

Спасибо kutschkem за предоставление хорошего ресурса для правильного обучения синтаксис.

...