MySQLストアドプロシージャを呼び出すにはどうすればよいですか?
MySQLストアドプロシージャの呼び出し方
MySQLで作成済みのストアドプロシージャを実行するには、CALLステートメントを使用します。CALLは、データベース内に定義されたプロシージャを明示的に呼び出すための専用コマンドです。
基本構文
CALL プロシージャ名();
引数を持つプロシージャの場合は、括弧内にカンマ区切りで値を渡します。
CALL プロシージャ名(引数1, 引数2, ...);
実行例:allrecords()プロシージャの呼び出し
ここでは、テーブル内の全レコードを取得する「allrecords()」というストアドプロシージャを呼び出してみましょう。
mysql> CALL allrecords(); +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 100 | Aarav | Delhi | Computers | | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 110 | Rahul | Chandigarh | History | +------+---------+------------+------------+ 4 rows in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
このように、CALLステートメントの後にプロシージャ名を指定するだけで、プロシージャ内に記述された処理が実行され、結果セットが返されます。
ポイント
- ストアドプロシージャはSELECT文ではなくCALL文で呼び出します。
- 引数が必要なプロシージャでは、正しい順序とデータ型で値を渡す必要があります。
- 存在しないプロシージャ名を指定するとエラーになるため、事前に
SHOW PROCEDURE STATUS;で確認しておくと安心です。
-
MySQLのストアドプロシージャ内でSTART TRANSACTIONを実行する方法
MySQLでは、START TRANSACTIONを実行すると新しいトランザクションが開始され、自動コミット(auto-commit)モードがオフに設定されます。これにより、明示的にCOMMITまたはROLLBACKを実行するまで、データの変更内容は確定されません。以下の例では、START TRANSACTIONを含むストアドプロシージャを作成し、employee.tblテーブルに新しいレコードを挿入します。まず、対象となるテーブルには現在、次のデータが格納されています。mysql> Select * from employee.tbl; +----+---------+ | Id |
-
MySQLストアドプロシージャ内で別のストアドプロシージャを呼び出す方法
MySQLのストアドプロシージャは、その内部で別のストアドプロシージャを呼び出すことが可能です。これはCALLステートメントを使用することで実現でき、処理をモジュール化して再利用性を高める上で非常に便利な機能です。ここでは、あるストアドプロシージャが別のストアドプロシージャを呼び出し、last_insert_id()を取得する具体例を見ていきましょう。サンプルテーブルの作成まず、例として使用するテーブルを作成します。以下のテーブルは、自動採番されるIDと名前を持つ従業員テーブルです。mysql> CREATE TABLE employee.tbl(Id INT NOT NULL AUTO