サブプログラムは、特定の問題を解決したり、関連する一連のタスクを実行したりするために、多数のSQL文とPL文を含むPLユニットです。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
サブプログラムにはパラメータを含めることができ、具体的な値は呼び出し元から渡されます。サブプログラムはストアドプロシージャまたは関数になります。典型的な使い方としては、ストアドプロシージャを使用して操作を行い、関数を使用して計算を行って値を返す方法があります。
ストアドサブプログラムはデータベース内部に格納されるサブプログラムで、多様なデータベースアプリケーションにおいて複雑な論理演算を実装します。ストアドサブプログラムには以下の3種類があります:
独立サブプログラム:スキーマ内に作成されるサブプログラムです。
パッケージ内部のサブプログラム:パッケージ本体内部に作成されるサブプログラムです。
ネストサブプログラム:PLブロック内に作成されるサブプログラムです。
独立サブプログラムはプログラムロジックのテストに便利ですが、大量のサブプログラムは管理が難しくなります。そのため、プログラムロジックが確定した後は、独立サブプログラムをビジネスモジュールごとに異なるパッケージに配置することを推奨します。
サブプログラムは、プログラムパッケージやトリガーなど、他の保守性機能の重要な構成要素です。
サブプログラム構造
サブプログラムはサブプログラムのヘッダーで始まり、そのヘッダーには名前とパラメータリスト(オプション)が指定されます。
サブプログラムの構造はPLブロックの構造と同じで、以下を含みます:
宣言部(オプション)
宣言部には型、定数、変数、例外、明示カーソル、ネストサブプログラムの宣言が含まれます。これらの項目はサブプログラムにとってローカルなものであり、サブプログラムの実行終了とともに存在しなくなります。
実行部(必須)
実行部には代入文、制御実行文、データ操作文が含まれます。
例外処理部(オプション)
例外処理部には、例外(ランタイムエラー)を処理するコードが含まれます。
サブプログラムにコメントを追加するとプログラムの可読性が向上します。コメントはサブプログラムの任意の場所に記述でき、コンパイラはコメントを無視します。1行コメントは二重バッテン記号(--)で始まり、行末で終わります。複数行コメントはスラッシュとアスタリスク(/*)で始まり、アスタリスクとスラッシュ(*/)で終わります。
ストアドプロシージャの構造は以下のとおりです:
PROCEDURE name [ ( parameter_list ) ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
statement; [ statement; ]...
[ EXCEPTION ]
exception_handler; [ exception_handler; ]... ]
END;
関数の構造は以下のとおりで、ストアドプロシージャと比較して、少なくとも1つの RETURN 句が追加されています:
FUNCTION name [ ( parameter_list ) ] RETURN data_type [ clauses ]
{ IS | AS }
[ declarative_part ]
BEGIN
-- 少なくとも1つの RETURN 文が必要です
statement; [ statement; ]...
[ EXCEPTION ]
exception_handler; [ exception_handler; ]... ]
END;
ストアドプロシージャと関数では、IS | AS の間のコードがサブプログラムの宣言であり、宣言部、実行部、例外処理部がサブプログラムの内容本体です。