SERIALLY_REUSABLE
プラグマは、サーバーへの1コール(データベースへのOCIコール、データベース・リンクを介したストアド・プロシージャ・コールなど)の間のみ、そのパッケージ状態が必要であることを示します。 このコールの後、パッケージ変数の記憶域の再利用が可能になり、長時間実行セッションのメモリー・オーバーヘッドが削減されます。
このプラグマは、同じセッションで1回のみ使用される大規模な一時作業領域を宣言するパッケージに適しています。
構文
serially_resuable_pragma ::=
キーワードとパラメータの説明
文がプラグマ(コンパイラ・ディレクティブ)であることを表します。 プラグマは、実行時ではなくコンパイル時に処理されます。 プラグマは、コンパイラに情報を渡します。
SERIALLY_REUSABLE
逐次再使用可能なパッケージのグローバル・メモリーは、ユーザー・グローバル領域(UGA)で個のユーザーに割り当てられるのではなく、システム・グローバル領域(SGA)にプールされます。 それによって、パッケージ作業領域の再使用が可能になります。 サーバーへのコールが終わると、メモリーはプールに戻されます。 パッケージが再使用されるたびに、そのパッケージのパブリック変数はデフォルト値かNULL
に初期設定されます。
逐次再使用可能パッケージには、データベース・トリガー、またはSQL文からコールされる他のPL/SQLサブプログラムからアクセスすることはできません。 これを試行すると、データベースによってエラーが生成されます。
使用上の注意
SERIALLY_REUSABLE
プラグマは、本体のないパッケージの仕様部、またはパッケージの仕様部と本体の両方で使用できます。 このプラグマは、パッケージの本体のみには使用できません。
例13-5では、逐次再使用可能パッケージを作成します。
例13-5逐次再使用可能パッケージの作成
CREATE PACKAGE pkg1 IS PRAGMA SERIALLY_REUSABLE; num NUMBER := 0; PROCEDURE init_pkg_state(n NUMBER); PROCEDURE print_pkg_state; END pkg1; / CREATE PACKAGE BODY pkg1 IS PRAGMA SERIALLY_REUSABLE; PROCEDURE init_pkg_state (n NUMBER) IS BEGIN pkg1.num := n; END; PROCEDURE print_pkg_state IS BEGIN DBMS_OUTPUT.PUT_LINE('Num: ' || pkg1.num); END; END pkg1; /
関連トピック
参照: 逐次再使用可能なPL/SQLパッケージの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。 |