しょしききおくてつづき
ストレージ・プロシージャの例は次のとおりです.
20.2.11.1.カーソルの宣言
この文はカーソルを宣言します.サブルーチンで複数のカーソルを定義することもできますが、1つのブロック内の各カーソルには一意の名前が必要です.
SELECT文にINTO句はありません.
20.2.11.2.カーソルOPEN文
この文は、以前に宣言したカーソルを開きます.
20.2.11.3.カーソルFETCH文
この文は、指定したオープンカーソルで次の行(次の行があれば)を読み取り、カーソルポインタを前進します.
カーソルは、プロセッサを宣言する前に宣言され、変数および条件は、カーソルまたはプロセッサを宣言する前に宣言されなければならない.
20.2.11.4.カーソルCLOSE文
この文は、前に開いたカーソルを閉じます.
明示的に閉じられていない場合、カーソルは宣言された複合文の最後に閉じられます.
20.2.11.5.オートエンドカーソル
カーソルがデータを取れない場合SET done=1;
20.2.11.6.delimiterコマンド
delimiterコマンドは文のデリミタを従います.//になります.これにより、プログラムボディで使用できるようになります.デリミタはmysql自身で説明するのではなく、サーバに渡されます.
20.2.11.7. DROP PROCEDURE IF EXISTS
この文は、ストレージまたは関数を削除するために使用されます.すなわち、作成されたサブルーチンをサーバから削除する.
参照:http://dl.iteye.com/topics/download/82db8bb1-7c55-3e74-9f56-de5f8e004ded
DELIMITER //
DROP PROCEDURE IF EXISTS `curdemo` //
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 //
DELIMITER ;
20.2.11.1.カーソルの宣言
DECLARE cursor_name CURSOR FOR select_statement
この文はカーソルを宣言します.サブルーチンで複数のカーソルを定義することもできますが、1つのブロック内の各カーソルには一意の名前が必要です.
SELECT文にINTO句はありません.
20.2.11.2.カーソルOPEN文
OPEN cursor_name
この文は、以前に宣言したカーソルを開きます.
20.2.11.3.カーソルFETCH文
FETCH cursor_name INTO var_name [, var_name] ...
この文は、指定したオープンカーソルで次の行(次の行があれば)を読み取り、カーソルポインタを前進します.
カーソルは、プロセッサを宣言する前に宣言され、変数および条件は、カーソルまたはプロセッサを宣言する前に宣言されなければならない.
20.2.11.4.カーソルCLOSE文
CLOSE cursor_name
この文は、前に開いたカーソルを閉じます.
明示的に閉じられていない場合、カーソルは宣言された複合文の最後に閉じられます.
20.2.11.5.オートエンドカーソル
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
カーソルがデータを取れない場合SET done=1;
20.2.11.6.delimiterコマンド
DELIMITER //
delimiterコマンドは文のデリミタを従います.//になります.これにより、プログラムボディで使用できるようになります.デリミタはmysql自身で説明するのではなく、サーバに渡されます.
20.2.11.7. DROP PROCEDURE IF EXISTS
DROP PROCEDURE IF EXISTS
この文は、ストレージまたは関数を削除するために使用されます.すなわち、作成されたサブルーチンをサーバから削除する.
参照:http://dl.iteye.com/topics/download/82db8bb1-7c55-3e74-9f56-de5f8e004ded