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のストアードプロシージャの便利さをアピールしてみる
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のストアードプロシージャの便利さをアピールしてみる