Bạn có thể làm điều này bằng cách có một biến chỉ được đặt bên trong vòng lặp. Sau đó, bạn có thể kiểm tra biến đó sau khi vòng lặp hoàn thành để xem nó đã được đặt chưa và quyết định xem bạn có cần thực hiện thêm công việc hay không.
Một cái gì đó như:
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. Tôi đã cập nhật mã của bạn vì dường như bạn đã hiểu sai cách sử dụng con trỏ cho vòng lặp.
- Con trỏ cho vòng lặp tạo biến bản ghi của riêng chúng một cách ngầm định, vì vậy bạn không cần phải tự khai báo.
- Bạn cũng không cần phải khai báo con trỏ một cách rõ ràng - điều này có thể được thực hiện như một phần của câu lệnh con trỏ cho vòng lặp.
- Bạn không cần điền vào một bản ghi mới có cùng các giá trị từ bản ghi con trỏ cho vòng lặp để sử dụng các giá trị (tất nhiên, miễn là bạn đang sử dụng chúng trong con trỏ cho vòng lặp !)