Anda dapat melakukan ini dengan memiliki variabel yang hanya diatur di dalam loop. Kemudian Anda dapat memeriksa variabel tersebut setelah loop selesai untuk melihat apakah sudah disetel, dan memutuskan apakah Anda perlu melakukan pekerjaan tambahan.
Sesuatu seperti:
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. Saya telah memperbarui kode Anda karena Anda tampaknya salah memahami cara menggunakan kursor untuk loop.
- Cursor-for-loop membuat variabel recordnya sendiri secara implisit, jadi Anda tidak perlu mendeklarasikannya sendiri.
- Anda juga tidak perlu mendeklarasikan kursor secara eksplisit - itu dapat dilakukan sebagai bagian dari pernyataan kursor-untuk-loop.
- Anda tidak perlu mengisi record baru dengan nilai yang sama dari record kursor-untuk-loop untuk menggunakan nilai (selama Anda menggunakannya dalam kursor-untuk-loop, tentu saja !)