🙌

【PL/SQL】サブプログラムについて

2024/04/14に公開

プロシージャとファンクションについて復習するのに、まずは、サブプログラムについて先に復習しておきます。
初心者が参考書や他の記事を参考にメモしているので、ご指摘ありましたらお気軽にコメントお願いします。

サブプログラムとは

サブプログラムは、特定のタスクを実行するための一連の命令をまとめたもので、名前をつけて何度でも呼び出すことができます。これにより、同じコードを何度も書く必要がなくなり、プログラムの再利用性と管理性が向上します。

サブプログラムのブロック構造は、無名ブロックと同様の構造です。他のどのPL/SQLブロック内でも宣言できます。

以下サブプログラムに含まれるもの

宣言部
サブプログラムはオプションの宣言部を持つことができるが、無名ブロックと違い、宣言部はキーワードDECLAREで開始されません。
オプションの宣言部はISまたはASに続きます。
実行部
実行部は必須になります。実行部のコードから、このサブプログラムを作成した目的を簡単に判断することができます。実行部はキーワードBEGINで始まり、キーワードENDで終わります。
例外処理部
例外を処理するために含まれるオプションです。

無名ブロックとサブプログラムの違い

無名ブロック サブプログラム
名前のないPL/SQLブロック 名前付きPL/SQLブロック
毎回コンパイルされる 1回のみコンパイルされる
データベースに格納されない データベースに格納される
他のアプリケーションから呼び出すことができない 名前があるため、他のアプリケーションから呼び出すことができる
値を戻さない ファンクションと呼ばれるサブプログラムは値を戻す必要がある
パラメータを受け取ることができない パラメータを受け取ることができる

無名ブロック
名前を持たないPL/SQLブロックで、一時的なタスクで使用され、データベースに保存されません。宣言部、実行部、例外処理部の3つのセクションから構成され、実行部のみが必須です。

サブプログラム
サブプログラムは、名前を持つPL/SQLブロックで、解析済みの状態でOracleデータベースに格納されます。 サブプログラムは再利用可能で、一度定義すると何度でも呼び出すことができます。

無名ブロックは一時的なタスクやテストに適しており、サブプログラムは再利用可能なコードの作成や複雑なタスクの実行に適しています。

参考

Oracle Database 10g PL/SQL基礎

https://docs.oracle.com/cd/E82638_01/lnpls/plsql-subprograms.html
https://www.saka-en.com/oracle/oracle-declare-plsql/
https://dolphinpg.net/program/oracle-pl-sql/

Discussion