oracle plsql oracle11g pls-00103

oracle - PLS-00103: Encontró el símbolo "END" cuando esperaba+y=etc.



plsql oracle11g (2)

Este es mi código:

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; /

este es el código de error completo:

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.

Estoy aprendiendo PL / SQL y estaba probando un ejemplo de mi libro, pero parece que hice algo mal, no solo dé la respuesta. Quiero saber cómo solucionó este problema y cómo cometí el error.


Reescribe un código como este

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;


Su cláusula final debe usar ELSE lugar de 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;

ACTUALIZAR

No es fácil darle consejos sobre cómo solucionar este problema (ya que es principalmente una cuestión de preferencia personal); las cosas que suelo probar son

  • reducir el ejemplo (en su caso, deshacerse de todas las cláusulas adicionales en el CASE )
  • reescribir la parte ofensiva de la consulta desde cero
  • Copie una consulta similar que funcione y cambie esa consulta gradualmente para parecerse a la consulta ofensiva hasta que encuentre el error