sql >> データベース >  >> RDS >> Oracle

Cursor For Loopが見つからないときにメッセージを出力する方法

    これを行うには、ループ内でのみ設定される変数を使用します。次に、ループの完了後にその変数をチェックして、変数が設定されているかどうかを確認し、追加の作業を行う必要があるかどうかを判断できます。

    次のようなもの:

    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 内でそれらを使用している限り)。 !)


    1. ユニオンを使用したmysqlの順序付けが機能していないようです

    2. sql-ORA-00937:単一グループのグループ関数ではありません

    3. mysql:再注文せずにLEFTJOINの後にORDERBYを保存する方法は?

    4. 列のエイリアス名としてSQLキーワードを使用する