mysqlのstoredProcedure(ストアドプロシージャ)についてです。

proctest01というストアドプロージャを定義します。その時delimiterを(;)から(//)に変更している。そして、最後にまた戻している。

delimiter //
create procedure proctest01 (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM kokuseki;
END;
//
delimiter ;

proctes01の呼び出し。プロシージャの出力引数には接頭辞@が必要です。

mysql> call proctest01(@outhoge);
Query OK, 1 row affected (0.00 sec)

mysql> select @outhoge;
+----------+
| @outhoge |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)

登録したプロシージャは、mysqlサーバを起動しなおしても使える。

ちなみにshowでプロシージャのコードを表示しようとしたらエラーが出た。原因はビルドの仕方ぽい。

mysql> show procedure code proctest01;
ERROR 1289 (HY000): The 'SHOW PROCEDURE|FUNCTION CODE' feature is disabled; you need MySQL built with '--with-debug' to have it working

show create procedureだと見れた。

mysql> show create procedure proctest01\G
*************************** 1. row ***************************
Procedure: proctest01
sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `proctest01`(OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM kokuseki;
END
character_set_client: cp932
collation_connection: cp932_japanese_ci
Database Collation: utf8_general_ci
1 row in set (0.00 sec)


■参考
mysqlのストアードプロシージャの便利さをアピールしてみる