MySQL

2013-09-03, mysql

ストアドプロシジャを定義する

とりあえずHello, World!から。この例だと特に説明するところも思いつかないくらいシンプルですね。

mysql> CREATE PROCEDURE hello(msg VARCHAR(255))
  SELECT CONCAT('Hello, ',msg);

プロシジャは戻り値を持たないので、呼び出す時にはCALLを使用します。

mysql> CALL hello('world!');
+-----------------------+
| CONCAT('Hello, ',msg) |
+-----------------------+
| Hello, world! |
+-----------------------+
1 row in set (0.00 sec)

対話モード(プロンプト)で、複数の処理を含むプロシジャを定義する場合は少し工夫が要ります。「;」をクエリの末尾として捉えられそこで実行されてしまうと正しいプロシジャになりません。そこでまず、クエリのデリミタを任意の文字列(ここでは「EOS」)に変更します。そうすると、BEGIN,ENDで囲まれた部分に任意の処理を定義することができるようになります。定義完了後に、再びもとのデリミタ「;」に戻します。

mysql> DELIMITER EOF
mysql> CREATE PROCEDURE hello(msg VARCHAR(255))
BEGIN
  SELECT CONCAT('Hello, ',msg);
END
EOF
mysql> DELIMITER ;

参考URL

MySQL (5th Edition) (Developer's Library)

この記事は役に立ちましたか?