Su cláusula final debe usar ELSE
en 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
Darle consejos sobre cómo solucionar este problema no es fácil (ya que es en gran medida una cuestión de preferencia personal); las cosas que suelo probar son
- limite el ejemplo (en su caso, deshágase de todas las cláusulas adicionales en el
CASE
) - reescribe la parte ofensiva de la consulta desde cero
- copie una consulta similar que funcione y cambie esa consulta gradualmente para parecerse a la consulta infractora hasta que encuentre el error