本項からはストアドプロシージャを実行しながら説明していきます。
ストアドプロシージャの実行方法
ストアドプロシージャを実行する基本構文は以下になります。
1 | CALL プロシージャ名([ 引数名 ]); |
CALLを使ってストアドプロシージャを呼び出せばOKです。
その際、ストアドプロシージャに引数が設定してあれば、カッコ内に引数を指定します。
ということで、前回作成した「proc1」を実行してみましょう。
1 | CALL proc1( 'カ' ); |
名前に「カ」を含む行のみがSELECTされたものが表示されることが確認できました。
ストアドプロシージャから別のストアドプロシージャを呼び出してみる
「【SQL基礎】ストアドルーチンとは」でも述べた通り、ストアドプロシージャは単純なSLQ文を実行すること以外のことも可能です。
そこで、次はストアドプロシージャから別のストアドプロシージャを呼び出してみましょう。
1 2 3 4 5 6 7 8 9 10 11 | DELIMITER // CREATE PROCEDURE proc2( IN param VARCHAR (10)) BEGIN CALL proc1(param); END ; // DELIMITER ; |
「proc2」の中で、CALLを使用して「proc1」を呼び出しているだけなので実行すると「proc1」と同じ結果が得られるはずです。
ということで、実際にやってみましょう。
1 | CALL proc2( 'カ' ); |
ストアドプロシージャからストアドプロシージャを呼び出せることが確認できました。
このように、組み合わせて使用することができるので、別々の処理で共通している部分を
一つのストアドプロシージャにまとめたりすることで保守性を上げたり、新たに開発するときに使いまわすことなどが可能です。
引数の種別がOUT(出力引数)のストアドプロシージャを実行してみる
ここまでは、引数が全てINのものでしたが、OUTのものをやってみましょう。
以下の、ストアドプロシージャを作成してください。
1 2 3 4 5 6 7 8 9 10 11 | DELIMITER // CREATE PROCEDURE proc3( OUT cnt INT ) BEGIN SELECT COUNT (*) FROM students INTO cnt; END ; // DELIMITER ; |
「proc3」はstudentsテーブルの全体件数を出力するストアドプロシージャになります。
引数cntに値を設定するのには、「SELECT … INTO」構文を使用しています。
詳しくは、次回に説明します。
では、実際に呼び出してみましょう。
1 2 3 | CALL proc3(@cnt); SELECT @cnt; |
実際に、件数が変数@cntに代入されていることが確認できました。
次回は、もっと複雑なストアドプロシージャを定義していきます。
今回の学習ポイント
・ストアドプロシージャからストアドプロシージャを呼び出すことができる。
・「SELECT … INTO」構文を使用すると、変数に値を代入できる。
練習問題
1.作成中