PLS-00103: Обнаружен символ "КОНЕЦ" при ожидании + & = и т. Д.
Это мой код:
DECLARE
v_grade CHAR(1) := UPPER('&grade');
appraisal VARCHAR(20);
BEGIN
appraisal := CASE v_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
WHEN 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE('Grade: '||v_grade||'Appraisal '||appraisal);
END;
/
это полный код ошибки:
ERROR at line 10:
ORA-06550: line 10, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
* & = - + < / > at in is mod remainer not rem then
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 between || multiset member submultiset.
Я изучаю PL/SQL, и я пробовал пример из своей книги, но, похоже, я сделал что-то не так, пожалуйста, не просто дайте ответ, я хочу знать, как вы решили эту проблему и как я допустил ошибку.
2 ответа
Решение
Ваш последний пункт должен использовать ELSE
вместо WHEN
:
DECLARE
v_grade CHAR(1) := 'C';
appraisal VARCHAR(20);
BEGIN
appraisal :=
CASE v_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE('Grade: '||v_grade||', Appraisal '||appraisal);
END;
ОБНОВИТЬ
Дать вам совет, как устранить неполадки, это нелегко (так как это в основном вопрос личных предпочтений); вещи, которые я обычно пытаюсь
- сузьте пример (в вашем случае, избавьтесь от всех дополнительных пунктов в
CASE
) - переписать оскорбительную часть запроса с нуля
- скопируйте схожий запрос, который работает, и постепенно изменяйте этот запрос, чтобы он напоминал оскорбительный запрос, пока не возникнет ошибка
Перепишите такой код
DECLARE
v_grade CHAR(30) := UPPER('&grade');
appraisal VARCHAR(20);
BEGIN
appraisal := CASE v_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE('Grade: '||v_grade||'Appraisal '||appraisal);
END;