PLS-00103:遇到符号" END"当期待+& =等

时间:2016-04-15 13:26:08

标签: oracle plsql oracle11g 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 个答案:

答案 0 :(得分: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中的所有其他条款)
  • 从头开始重写查询中有问题的部分
  • 复制一个有效的类似查询,并逐步更改该查询以类似于违规查询,直到我遇到错误

答案 1 :(得分:0)

重写这样的代码

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;