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アドバンスト・アプリケーション開発者ガイド』を参照してください。 |