Developer

【SQL基礎】ストアドプロシージャの実行part1
2022.01.13
Lv1

【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.作成中

答え

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ