Du kan gøre dette ved at have en variabel, som kun bliver sat inde i løkken. Så kan du kontrollere den variabel, efter at sløjfen er fuldført, for at se, om den blev indstillet, og beslutte, om du skal udføre yderligere arbejde.
Noget som:
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. Jeg har opdateret din kode, da du ser ud til at have misforstået, hvordan du bruger en markør til loop.
- Cursor-for-loops opretter deres egen registreringsvariabel implicit, så du ikke behøver at erklære en selv.
- Du behøver heller ikke at erklære en markør eksplicit - det kan gøres som en del af cursor-for-loop-sætningen.
- Du behøver ikke at udfylde en ny post med de samme værdier fra cursor-for-loop recorden for at bruge værdierne (så længe du bruger dem i cursor-for-loop, selvfølgelig !)