【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」テーブルで確認できる。