ネストしたサブプログラム、パッケージ・サブプログラムおよびスタンドアロン・サブプログラム

サブプログラムは、PL/SQLブロック内(別のサブプログラムの可能性もあります)、パッケージ内またはスキーマ・レベルで作成できます。

PL/SQLブロック内で作成されるサブプログラムは、ネストしたサブプログラムです。サブプログラムは、宣言と定義を同時に行うか、または最初に宣言して、後で同じブロック内で定義することができます(「前方宣言」を参照)。ネストしたサブプログラムは、スタンドアロン・サブプログラムまたはパッケージ・サブプログラム内でネストした場合にのみ、データベースに格納されます。

パッケージ内で作成されるサブプログラムは、パッケージ・サブプログラムです。パッケージ仕様部で宣言し、パッケージ本体で定義します。パッケージを削除するまでデータベースに格納されます。(パッケージについては、「PL/SQLパッケージ」を参照してください。)

スキーマ・レベルで作成されるサブプログラムは、スタンドアロン・サブプログラムです。CREATE FUNCTION文またはCREATE PROCEDURE文を使用して作成できます。DROP FUNCTION文またはDROP PROCEDURE文を使用して削除するまでデータベースに格納されます。(これらの文の詳細は、「ストアドPL/SQLユニット用のSQL文」を参照してください。)

ストアド・サブプログラムは、パッケージ・サブプログラムまたはスタンドアロン・サブプログラムのいずれかです。ストアド・サブプログラムはAUTHIDおよびACCESSIBLE BY句の影響を受けます。これらはCREATE FUNCTIONCREATE PROCEDUREおよびCREATE PACKAGE文で使用されます。AUTHID句はサブプログラムが実行時に発行するSQL文の名前解決と権限チェックに影響します(詳細は「実行者権限および定義者権限(AUTHIDプロパティ)」)を参照してください。ACCESSIBLE BY句は、サブプログラムにアクセスできるPL/SQLユニットのホワイト・リストを指定します。