これを行うには、ループ内でのみ設定される変数を使用します。次に、ループの完了後にその変数をチェックして、変数が設定されているかどうかを確認し、追加の作業を行う必要があるかどうかを判断できます。
次のようなもの:
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 ステートメントの一部として行うことができます。
- 値を使用するために、cursor-for-loop レコードと同じ値を新しいレコードに入力する必要はありません (もちろん、cursor-for-loop 内でそれらを使用している限り)。 !)