MySQLのチップス - ストアド

投稿日 2015/02/09

[Home] [Index] 


プロシージャや関数を作るには

プロシージャや関数を作るには CREATE PROCEDURE 文や CREATE FUNCTION 文を使います。これらの文を使う前には、必ず DELIMITER 文で文の終端記号(;)を変更しておく必要があります。これは、ルーチンの中でも ; が使われており CREATE 文の終わりとの区別がつかないためです。

DELIMITER //
CREATE PROCEDURE proc()
BEGIN
  ....
END//
DELIMITER ;

詳細は ストアドを作る(削除する)には を参照してください。


プロシージャや関数を使うには

プロシージャを使うには CALL 文を使います。一方、ファンクションを呼び出すには SELECT 文を使います。

CALL procedure(param, param, ..);
SELECT function(param, param, ..);

使用例は ストアドを作る(削除する)には を参照してください。


パラメータを使うには

パラメータの前には IN, OUT, INOUT を付ける必要があります (※ 関数は IN のみなので付けるとエラーになる)。また、型を変数名の後に付ける必要があります。型名は、MySQL のフィールドの型です。

CREATE PROCEDURE proc1(IN n INT, OUT s VARCHAR(100), INOUT p CHAR(1))

関数の場合は、返す型を示す RETURNS 句が必要になります。

CREATE FUNCTION func1(IN x FLOAT) RETURNS FLOAT

変数を使うには

変数を使うためには、DECLARE 文を使って宣言する必要があります。ワーク用の変数は @変数 として宣言せずに使うこともできます。

DECLARE i INT;
DECLARE str VARCHAR(100);

カーソルを使うには

カーソルは DECLARE 文を使って宣言します。使う前には、OPEN 文で初期化して、使い終わったら CLOSE 文で解放します。

DECLARE cur CURSOR FOR SELECT * FROM table1 WHERE id > param1;
OPEN cur
 ...
CLOSE cur

IF文を使うには

IF 文は次のような構造をしています。

IF 条件 THEN
 ..
ELSE
 ..
END IF;

繰り返しを使うには

WHILE 文は次のような構造をしています。

WHILE 条件 DO
 ...
END WHILE;

サンプル

delimiter //
create procedure pixlargesize(in idfrom int, in idto int)
begin
  declare done int default 0;
  declare s text;
  declare i int;
  declare cur cursor for select id, script from pix where id between id from and id to;
  declare continue handler for sqlstate '02000' set done = 1;
  open cur;
  repeat
    fetch cur into i, s;
    update pixiv set script = replace(s, 'medium', 'large') where id = i;
  until done end repeat;
  close cur;
end//
delimiter ;

 

 


 このページの先頭 

 開設 2014年12月   著作権 2014-2015 bonk.red  連絡先: こちらからメッセージを送ってください。 (お仕事も大募集)

 このページの先頭へ..