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