这是我的代码:
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,我正在尝试书中的一个例子,但似乎我做错了什么,请不要只是给出答案。我想知道你是如何解决这个问题的,以及我是如何犯错误的。
您的final子句应该使用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;