Можете да направите това, като имате променлива, която се задава само вътре в цикъла. След това можете да проверите тази променлива, след като цикълът приключи, за да видите дали е зададена и да решите дали трябва да извършите допълнителна работа.
Нещо като:
DECLARE
course_name VARCHAR2(40) := '&course_input';
v_rows_present BOOLEAN := FALSE;
BEGIN
FOR course_rec IN (SELECT a.description,
a.cost,
a.prerequisite,
b.cost AS preq_cost
FROM course a
LEFT JOIN course b
ON a.prerequisite = b.course_no
WHERE upper(a.description) LIKE '%' || course_name || '%')
LOOP
v_rows_present := TRUE;
IF course_rec.prerequisite IS NULL
THEN
dbms_output.put_line('There is NO prerequisite course for any that starts on ' || course_name || '. Try again');
ELSE
dbms_output.put_line('Course: ' || course_rec.course_description);
dbms_output.put_line('Cost: ' || course_rec.cost);
dbms_output.put_line('Prerequisite: ' || course_rec.prerequisite);
dbms_output.put_line('Prerequisite Cost: ' || course_rec.prerequisite_cost);
dbms_output.put_line('=================================================');
END IF;
END LOOP;
IF NOT v_rows_present
THEN
dbms_output.put_line('There is NO VALID course that starts on ' || course_name || '. Try again.');
END IF;
END;
/
N.B. Актуализирах вашия код, тъй като изглежда, че сте разбрали погрешно как да използвате курсор за цикъл.
- Cursor-for-loops създават своя собствена променлива за запис имплицитно, така че не е необходимо да декларирате такава.
- Също така не е необходимо да декларирате изрично курсор – това може да се направи като част от оператора cursor-for-loop.
- Не е необходимо да попълвате нов запис със същите стойности от записа на курсора за цикъл, за да използвате стойностите (стига да ги използвате в рамките на цикъла на курсора, разбира се !)