INTO変数を選択していて、レコードが返されない場合は、NODATAFOUNDエラーが発生するはずです。上記のコードを書く正しい方法は、SELECTステートメントを独自のBEGIN / EXCEPTION/ENDブロックでラップすることだと思います。例:
...
v_final_grade NUMBER;
v_letter_grade CHAR(1);
BEGIN
BEGIN
SELECT final_grade
INTO v_final_grade
FROM enrollment
WHERE student_id = v_student_id
AND section_id = v_section_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_final_grade := NULL;
END;
CASE -- outer CASE
WHEN v_final_grade IS NULL THEN
...