MySQL 5.1 リファレンスマニュアル :: 17 ストアドプロシージャとファンクション :: 17.2 ストアドルーチン構文 :: 17.2.9 カーソル
« 17.2.8.2 DECLARE ハンドラ

17.2.9.1 宣言用カーソル »
Section Navigation      [Toggle]
  • 17.2 ストアドルーチン構文
  • 17.2.1 CREATE PROCEDUREおよびCREATE FUNCTION 構文
  • 17.2.2 ALTER PROCEDURE および ALTER FUNCTION 構文
  • 17.2.3 DROP PROCEDURE および DROP FUNCTION 構文
  • 17.2.4 CALLステートメント構文
  • 17.2.5 BEGIN ... END 複合ステートメント構文
  • 17.2.6 DECLAREステートメント用構文
  • 17.2.7 ストアドルーチン内の変数
  • 17.2.8 条件とハンドラ
  • 17.2.9 カーソル
    • 17.2.9.1 宣言用カーソル
    • 17.2.9.2 カーソルOPENステートメント
    • 17.2.9.3 カーソルFETCHステートメント
    • 17.2.9.4 カーソル CLOSE ステートメント
  • 17.2.10 フローコントロール・コンストラクト

17.2.9. カーソル

[+/-]

17.2.9.1. 宣言用カーソル
17.2.9.2. カーソルOPENステートメント
17.2.9.3. カーソルFETCHステートメント
17.2.9.4. カーソル CLOSE ステートメント

ストアドプロシージャとファンクションの内側に単純なカーソルがサポートされています。その構文は埋め込まれているSQLの中のものと同じです。.カーソルは現在、アセンシティブ、読み取り専用、そしてスクロール機能はついていません。アセンシテブはサーバがその結果テーブルの複製を作ることができるか、できないとを意味します。

カーソルは、ハンドラを宣言する前に宣言されなければなりません。また、変数と条件はカーソルかハンドラのいずれかを宣言する前に宣言されなければなりません。

例:

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a CHAR(16);
  DECLARE b,c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  OPEN cur1;
  OPEN cur2;

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

  CLOSE cur1;
  CLOSE cur2;
END
Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates