Developer

【SQL基礎】ストアドプロシージャの登録
2021.09.30
Lv1

【SQL基礎】ストアドプロシージャの登録

本項からはストアドプロシージャについて説明をしていきます。


ストアドプロシージャの登録の基本構文

ストアドプロシージャの基本構文は以下になります。

CREATE PROCEDURE [データベース名.]プロシージャ名 ( [[IN | OUT | INOUT] 引数名 データ型] )
BEGIN

一連の処理

END;

データベース名は省略した場合は、デフォルトデータベースに紐づけられます。
引数にはIN、OUT、INOUTが指定可能です。省略した場合は、デフォルトのINが指定されます。
「IN」を指定された引数は、プロシージャへと値を渡すことが可能ですが、呼び出し元には返ってきません。
「OUT」の場合は、逆にプロシージャへと値を渡すことができませんが、呼び出し元には返ってきます。また、引数の初期値はNULLです。
「INOUT」の場合は、プロシージャへと値を渡すこと可能で、呼び出し元にも値が返ってきます。

また、「【SQL基礎】トリガーの作成part2」のトリガーの処理が複数行ある場合と同じように、定義文中で「;」を使用するためデリミタの変更が必要となります。

では、実際にストアドプロシージャを登録してみましょう。
今回使用するテーブルの内容は以下になります。

DELIMITER //

CREATE PROCEDURE proc1(IN param VARCHAR(10))
BEGIN

SELECT *
FROM students
WHERE name LIKE CONCAT('%', param, '%');

END;
//

DELIMITER ;

デリミタは変更したら、戻すようことを忘れないようにしてください。

では、本当に登録されたかストアドプロシージャの一覧を出して確認してみましょう。
以下のSQLを実行してみてください。

SELECT  ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
FROM information_schema.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

登録できていることが確認できました。

次回は、実際に色々と定義しつつプロシージャを実行していきます。


今回の学習ポイント

・ストアドプロシージャの引数には、IN、OUT、INOUTを指定できる。
・ストアドプロシージャを登録するときは、デリミタの変更が必要。


練習問題

1.ストアドプロシージャの説明について間違っているものはどれか

A)引数は省略できる。
B)引数にINを指定すると、プロシージャに値を渡すことができる。
C)引数の種別(IN、OUT、INOUT)は省略できない。
D)プロシージャの一覧は「information_schema.ROUTINES」テーブルで確認できる。

答え

Cの「引数の種別(IN、OUT、INOUT)は省略できない。」が正解です。


連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ