La tua clausola finale dovrebbe usare ELSE
invece di 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;
AGGIORNAMENTO
Darti consigli su come risolvere questo problema non è facile (dal momento che è in gran parte una questione di preferenze personali); le cose che di solito provo sono
- restringi l'esempio (nel tuo caso, elimina tutte le clausole aggiuntive nel
CASE
) - riscrivi da zero la parte offensiva della query
- copia una query simile che funzioni e modificala gradualmente in modo che assomigli alla query incriminata finché non riscontro l'errore