SQL プロシージャーのカーソル

SQL プロシージャーでは、結果セット (データ行のセット) の定義と、1 行ずつのベースでの複雑な論理の実行は、カーソルによって可能になります。

また、SQL プロシージャーは、この同じメカニックを使用して、結果セットを定義し、SQL プロシージャーの呼び出し元またはクライアント・アプリケーションに結果セットを直接戻すこともできます。

カーソルを、一連の行の中の 1 つの行を指すポインターとみなすことができます。 カーソルは、一度に 1 つの行のみを参照できる一方で、必要に応じて結果セットの他の行に移動することもできます。

SQL プロシージャーでカーソルを使用するには、次のようにする必要があります。
  1. 結果セットを定義するカーソルを宣言します。
  2. カーソルをオープンし、結果セットを確立します。
  3. 必要に応じて、一度に 1 行ずつ、カーソルからローカル変数にデータを取り出します。
  4. 完了したなら、カーソルをクローズします。
カーソルを処理するには、次のような SQL ステートメントを使用する必要があります。
  • DECLARE CURSOR
  • OPEN
  • FETCH
  • CLOSE
以下の例は、SQL プロシージャー内での読み取り専用カーソルの基本的な使用法を示しています。

  CREATE PROCEDURE sum_salaries(OUT sum INTEGER) 
  LANGUAGE SQL
  BEGIN
    DECLARE p_sum INTEGER;
    DECLARE p_sal INTEGER;
    DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
    DECLARE c CURSOR FOR SELECT SALARY FROM EMPLOYEE;
 
     SET p_sum = 0;

     OPEN c;

     FETCH FROM c INTO p_sal;

     WHILE(SQLSTATE = '00000') DO
        SET p_sum = p_sum + p_sal;
        FETCH FROM c INTO p_sal; 
     END WHILE;

     CLOSE c;

     SET sum = p_sum;

  END