しょしききおくてつづき

2586 ワード

ストレージ・プロシージャの例は次のとおりです.
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