サブルーチンとは、特定の問題を解決したり、関連する一連のタスクを実行したりするために、多くのSQL文やPL文を含むPLユニットです。 サブルーチンにはパラメータを含めることができ、その具体的な値は呼び出し元から渡されます。サブルーチンはストアドプロシージャまたは関数のいずれかになり得ます。典型的な使い方としては、ストアドプロシージャを用いて操作を実行し、関数を用いて値を計算して返す方法が挙げられます。
ストアドプロシージャとは、データベース内部に格納されるサブルーチンであり、さまざまなデータベースアプリケーションにおいて複雑な論理演算を実現するために使用されます。MySQLモードのサブルーチンは独立したプログラムであり、スキーマ内で作成されるプログラムのみです。
注意
MySQLモードのサブルーチンは、SQL標準におけるストアドプロシージャの規格に従っており、Oracleモードのサブルーチン(PL)とは構文や機能において顕著な違いがあります。
サブルーチン構造
サブルーチンの構造はPLブロックと同じであり、以下を含みます:
宣言部(オプション)
宣言部には、型、定数、変数、例外、明示カーソル、およびネストされたプログラムの宣言が含まれます。これらの項目はサブルーチンに対してローカルであり、サブルーチンの実行が終了するとすべて存在しなくなります。
実行部(必須)
実行部には代入文、制御実行文、データ操作文が含まれます。
例外処理部(オプション)
例外処理部には、例外(ランタイムエラー)を処理するコードが含まれます。
サブルーチンにコメントを追加することで、プログラムの可読性が向上します。コメントはサブルーチン内の任意の場所に記述でき、コンパイラはコメントを無視します。1行コメントは二重のハイフン(--)で始まり、コメント範囲は行末で終了します。複数行コメントはスラッシュとアスタリスク(/)で始まり、アスタリスクとスラッシュ(/)で終了します。
ストアドプロシージャの構造は以下のとおりです:
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
routine_body:
Valid SQL routine statement
関数の構造は以下のとおりで、ストアドプロシージャと比較して、RETURNS 句が追加されています:
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
routine_body:
Valid SQL routine statement
サブルーチンの利点
クライアントプログラムと比較して、サブルーチンには以下の利点があります:
パフォーマンスの向上
ネットワーク転送によるコストを削減します。事前にコンパイルしたり、キャッシュメカニズムを使用してキャッシュしたりすることで、実行時のパフォーマンス消費を削減できます。
メモリ消費の削減
データベースの共有メモリメカニズムは、複数のユーザーが同一のストアドプロシージャを実行する際にメモリ消費を削減します。
生産性の向上
ストアドプロシージャはユーザーのコードロジックを削減し、ユーザーの生産性を向上させます。
セキュリティの向上
ストアドプロシージャの権限情報を指定することで、セキュリティが向上します。
継承性を持つ
ユーザーは権限を取得することで、他のユーザーが定義したストアドプロシージャにアクセスできます。
サブルーチンの実行
サブルーチンは以下の3つの方法で実行できます:
MySQLツールを使用する
データベースアプリケーションから呼び出す
別のストアドプロシージャまたはトリガーから呼び出す
サブルーチンのメタデータ
サブルーチン関連のメタデータは、以下の方法で取得できます:
INFORMATION_SCHEMAの ROUTINESビューを照会することで、すべてのサブルーチンを取得できます。SHOW CREATE PROCEDUREを使用すると、特定のストアドプロシージャの定義を確認できます。SHOW CREATE FUNCTIONを使用すると、特定の関数の定義を確認できます。SHOW CREATE TRIGGERを使用すると、特定のトリガーの定義を確認できます。