複数行のデータを変数へ代入する(Cursors)

SELECT文で得られた単一行の結果を変数へ代入するにはSELECT ... INTO を使用しますが、複数行からなる結果を変数へ代入していくには、CURSORを使用します。

カーソルは、DECLARE(カーソル宣言)、OPEN(カーソルを開く)、FETCH(取得)、 CLOSE(カーソルを閉じる)の4つの処理でデータを取得します。

1.DECLARE(カーソル宣言)

DECLARE カーソル名 CURSOR FOR SELECT文

2.OPEN(カーソルを開く)

OPEN カーソル名

3.FETCH(取得)

FETCH カーソル名 INTO 変数1[,変数2...]

4.CLOSE(カーソルを閉じる)

CLOSE カーソル名

カーソルの使用例

MySQLのマニュアルのサンプルが、DECLARE ... HANDLERを使っていてわかりやすいので ほぼ、そのまま例として使用します。

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a,b INT;
  DECLARE cur1 CURSOR FOR SELECT price1,price2 FROM test.t1;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  OPEN cur1;

  REPEAT
    FETCH cur1 INTO a, b;
    IF NOT done THEN
       IF a < b THEN
          INSERT INTO test.t3 VALUES (a,b);
       END IF;
    END IF;
  UNTIL done END REPEAT;

  CLOSE cur1;
END

ループを抜けるきっかけとして、DECLARE ... HANDLERを使用しています。

[an error occurred while processing this directive]