ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

117 DBMS_SESSION

このパッケージは、PL/SQLからSQL ALTER SESSION文とSET ROLE文へのアクセスおよび他のセッション情報へのアクセスを提供します。 DBMS_SESSIONを使用すると、作業環境とセキュリティ・レベルを設定できます。

この章では、次の項目について説明します。


DBMS_SESSIONの使用方法


セキュリティ・モデル

このパッケージは、パッケージ所有者SYSではなく、コール・ユーザーの権限で実行されます。


使用上の注意

close_cached_open_cursorsをオンまたはオフに変更しないでください。


DBMS_SESSIONサブプログラムの要約

表117-1 DBMS_SESSIONパッケージのサブプログラム

サブプログラム 説明

CLEAR_ALL_CONTEXTプロシージャ


すべてのコンテキスト情報を消去します。

CLEAR_CONTEXTプロシージャ


コンテキストを消去します。

CLEAR_IDENTIFIERプロシージャ


識別子を消去します。

CLOSE_DATABASE_LINKプロシージャ


データベース・リンクをクローズします。

FREE_UNUSED_USER_MEMORYプロシージャ


大量のメモリーが必要な操作を実行した後で未使用のメモリーを再要求できます。

IS_ROLE_ENABLEDファンクション


指定のロールがセッションで使用可能かどうかを判別します。

IS_SESSION_ALIVEファンクション


指定されたセッションがアクティブかどうかを判別します。

LIST_CONTEXTプロシージャ


現行のセッションについて、アクティブなネームスペースとコンテキストのリストを戻します。

SESSION_TRACE_DISABLEプロシージャ


コール元のセッションに対するセッション・レベルのSQLトレースを再設定します。

SESSION_TRACE_ENABLEプロシージャ


コール元のセッションに対するセッション・レベルのSQLトレースを使用可能にします。

RESET_PACKAGEプロシージャ


セッション内のすべてのパッケージのインスタンス化を解除します。

SET_CONTEXTプロシージャ


コンテキスト属性の値を設定または再設定します。

SET_IDENTIFIERプロシージャ


識別子を設定します。

SET_NLSプロシージャ


グローバリゼーション・サポート(NLS)を設定します。

SET_ROLEプロシージャ


ロールを設定します。

SET_SQL_TRACEプロシージャ


トレースをオンまたはオフにします。

SWITCH_CURRENT_CONSUMER_GROUPプロシージャ


ユーザーの現行のセッションでの、現行のリソース・コンシューマ・グループの変更を容易にします。

UNIQUE_SESSION_IDファンクション


データベースに現在接続しているすべてのセッションに対して一意の識別子を戻します。



CLEAR_ALL_CONTEXTプロシージャ

構文

DBMS_SESSION.CLEAR_ALL_CONTEXT
   namespace         VARCHAR2);

パラメータ

表117-2 CLEAR_ALL_CONTEXTプロシージャのパラメータ

パラメータ 説明

namespace

アプリケーション・コンテキスト情報を消去するネームスペース。必須です。


使用上の注意

このプロシージャは、信頼されたパッケージで直接的または間接的に起動する必要があります。


CLEAR_CONTEXTプロシージャ

構文

DBMS_SESSION.CLEAR_CONTEXT
   namespace         VARCHAR2,
   client_identifier VARCHAR2
   attribute         VARCHAR2);

パラメータ

表117-3 CLEAR_CONTEXTプロシージャのパラメータ

パラメータ 説明

namespace

アプリケーション・コンテキストを消去するネームスペース。必須です。

セッション・ローカル・コンテキストの場合、namespaceの指定は必須です。 Session Local Contextとして定義したnamespaceは、グローバルにアクセスされるコンテキストのみに関連付けられるため、client_identifierはオプションとなります。

グローバルにアクセスされるコンテキストの場合、namespaceの指定は必須です。 NULLclient_identifierに対する有効な値です。これは、識別子の設定がないセッションでは、SET_CONTEXTを使用して設定された「namespaceattributevalueusernamenull」のようなコンテキストを参照できるためです。

client_identifier

グローバル・コンテキストに適用され、その他のタイプのコンテキストではオプションです(最大64バイト)。

attribute

消去するネームスペース内の特定の属性(オプション)。デフォルトはNULLです。attributeNULLを指定すると、該当するネームスペースの「namespaceattributevalue」がセッションから消去されます。 attributeを指定しないと、namespace引数とclient_identifier引数に関するすべてのコンテキスト情報が消去されます。


使用上の注意

このプロシージャは、信頼されたパッケージで直接的または間接的に起動する必要があります。


CLEAR_IDENTIFIERプロシージャ

このプロシージャは、セッションのset_client_idを削除します。

構文

DBMS_SESSION.CLEAR_IDENTIFIER;

使用上の注意

このプロシージャはパブリックで実行可能です。


CLOSE_DATABASE_LINKプロシージャ

このプロシージャは、オープンしているデータベース・リンクをクローズします。このプロシージャは、次のSQL文と同じです。

ALTER SESSION CLOSE DATABASE LINK <name>

構文

DBMS_SESSION.CLOSE_DATABASE_LINK (
   dblink VARCHAR2);

パラメータ

表117-4 CLOSE_DATABASE_LINKプロシージャのパラメータ

パラメータ 説明

dblink

クローズするデータベース・リンク名。



FREE_UNUSED_USER_MEMORYプロシージャ

このプロシージャは、大量のメモリー(100Kを超えるメモリー)が必要な操作の実行後、未使用のメモリーを再要求します。

大量のメモリーを使用する操作の例を次に示します。

v$sesstat固定ビューまたはv$statname固定ビューにある統計情報「セッションUGAメモリー」と「セッションPGAメモリー」を追跡調査して、ユーザー・メモリーを監視できます。これらの統計情報の監視では、このプロシージャが解放したメモリー量も表示されます。


注意:

このプロシージャは、メモリーが非常に不足している場合のみ使用してください。頻繁に使用せず、慎重に使用してください。

構文

DBMS_SESSION.FREE_UNUSED_USER_MEMORY;

戻り値

このプロシージャの動作は、クライアントのかわりに稼働しているサーバーの構成によって決まります。

使用上の注意

このプロシージャを使用してメモリーを解放するためには、そのメモリーが使用中でないことが必要です。

ある操作でメモリーを割り当てた後は、同じタイプの操作でのみ、割り当てられたメモリーを再利用できます。たとえば、ソート用に割り当てられたメモリーは、ソート完了後にそのメモリーが使用されなくなると、別のソート処理でのみ再利用できます。ソートとコンパイルについては、操作の完了後にメモリーが使用されなくなると、ユーザーはこのプロシージャをコールして、この未使用メモリーを解放できます。

索引表にはメモリーが暗黙的に割り当てられ、その索引表の要素に割り当てられた値が格納されます。したがって、索引表内の要素が多いほど、RDBMSは多くのメモリーを索引表に割り当てます。索引表に要素がある間は、索引表に関連するメモリーは使用中になります。

索引表の有効範囲によって、メモリーの使用期間が決まります。グローバルに宣言された索引表は、パッケージまたはパッケージ本体で宣言された索引表です。これらの索引表には、セッション・メモリーからメモリーが割り当てられます。グローバルに宣言された索引表では、メモリーは、ユーザーのログイン中(ユーザーのセッションの間)は使用中のままとなり、Oracleから切断された後に解放されます。

ローカルで宣言された索引表は、ファンクション、プロシージャまたは無名ブロック内で宣言された索引表です。このような索引表には、PGAメモリーからメモリーが割り当てられます。ローカルに宣言された索引表については、索引表が宣言されたプロシージャ、ファンクションまたは無名ブロックをユーザーが実行しているかぎり、メモリーは使用中のままになります。プロシージャ、ファンクションまたは無名ブロックの実行が完了すると、そのメモリーはローカルに宣言された他の索引表で使用可能になります(つまり、メモリーは使用中ではなくなります)。

初期化されていない空の索引表を既存の索引表に割り当てることは、索引表とその索引表に関連付けられたメモリーを明示的に再初期化するための1つの方法です。この操作を行うと、索引表に関連付けられているメモリーは使用中ではなくなり、このプロシージャをコールして解放できます。この方法は、グローバルに宣言した索引表がユーザー・セッションの期間中に大きくなる可能性があり、ユーザーが索引表の内容を必要としない場合は、特に役立ちます。

索引表の有効範囲に関連するメモリー・ルールは適用されたままです。しかし、この方法とプロシージャによって、ユーザーが介入して、索引表に関連付けられているメモリーを明示的に解放できます。

次のPL/SQLは、この方法とFREE_UNUSED_USER_MEMORYプロシージャの使用方法を示します。

CREATE PACKAGE foobar
   type number_idx_tbl is table of number indexed by binary_integer;

   store1_table  number_idx_tbl;     --  PL/SQL indexed table
   store2_table  number_idx_tbl;     --  PL/SQL indexed table
   store3_table  number_idx_tbl;     --  PL/SQL indexed table
   ...
END;            --  end of foobar

DECLARE
   ...
   empty_table   number_idx_tbl;     --  uninitialized ("empty") version
BEGIN
   FOR i in 1..1000000 loop
     store1_table(i) := i;           --  load data
   END LOOP;
   ...
   store1_table := empty_table;      --  "truncate" the indexed table
   ...
   -
   dbms_session.free_unused_user_memory;  -- give memory back to system

   store1_table(1) := 100;           --  index tables still declared;
   store2_table(2) := 200;           --  but truncated.
   ...
END;

IS_ROLE_ENABLEDファンクション

このファンクションは、指定のロールがこのセッションで使用可能かどうかを判別します。

構文

DBMS_SESSION.IS_ROLE_ENABLED (
   rolename    VARCHAR2)
  RETURN BOOLEAN;

パラメータ

表117-5 IS_ROLE_ENABLEDファンクションのパラメータ

パラメータ 説明

rolename

ロール名。


戻り値

表117-6 IS_ROLE_ENABLEDファンクションの戻り値

戻り値 説明

is_role_enabled

ロールが使用可能かどうかによってTRUEまたはFALSE



IS_SESSION_ALIVEファンクション

このファンクションは、指定されたセッションがアクティブかどうかを判別します。

構文

DBMS_SESSION.IS_SESSION_ALIVE (
   uniqueid VARCHAR2)
  RETURN BOOLEAN;

パラメータ

表117-7 IS_SESSION_ALIVEファンクションのパラメータ

パラメータ 説明

uniqueid

セッションの一意のID。UNIQUE_SESSION_IDによって戻されるものと同じ。


戻り値

表117-8 IS_SESSION_ALIVEファンクションの戻り値

戻り値 説明

is_session_alive

セッションがアクティブかどうかによってTRUEまたはFALSE



LIST_CONTEXTプロシージャ

このプロシージャは、現行のセッションに関するアクティブなネームスペースとコンテキストのリストを戻します。

構文

TYPE AppCtxRecTyp IS RECORD (
   namespace VARCHAR2(30),
   attribute VARCHAR2(30),
   value     VARCHAR2(256));

TYPE AppCtxTabTyp IS TABLE OF AppCtxRecTyp INDEX BY BINARY_INTEGER;

DBMS_SESSION.LIST_CONTEXT (
   list OUT AppCtxTabTyp,
   size OUT NUMBER);

パラメータ

表117-9 LIST_CONTEXTプロシージャのパラメータ

パラメータ 説明

list

現行のセッション内のアプリケーション・コンテキスト設定リストを格納するバッファ。


戻り値

表117-10 LIST_CONTEXTプロシージャの戻り値

戻り値 説明

list

現行セッションの設定(ネームスペース、属性、値)リスト。

size

戻されたバッファ内のエントリ数を戻します。


使用上の注意

リスト内のコンテキスト情報は、<namespace> <attribute> <value>の順に表示されます。listは表タイプの変数なので、そのサイズは戻されるリストのサイズに合わせて動的に調整されます。


MODIFY_PACKAGE_STATEプロシージャ

このプロシージャは、セッションでアクティブなすべてのPL/SQLプログラム・ユニットのセッション状態で、action_flagsパラメータで指定された様々なアクションを実行するために使用できます。このプロシージャは、PL/SQLコールで実行中の現行の起動が終了すると、有効になります。 このプロシージャでは、表117-12に示すDBMS_SESSION定数が使用されます。

構文

DBMS_SESSION.MODIFY_PACKAGE_STATE(
   action_flags IN PLS_INTEGER);

パラメータ

表117-11 MODIFY_PACKAGE_STATEプロシージャのパラメータ

パラメータ 説明

action_flags

PL/SQLプログラム・ユニットで実行するアクションを判別するビット・フラグ。

DBMS_SESSION.FREE_ALL_RESOURCES(または1): セッションから、以前実行したPL/SQLプログラムに関連付けられたメモリーをすべて解放します。グローバルなパッケージの現行の値を消去し、キャッシュされたカーソルをクローズします。その後の使用では、PL/SQLプログラム・ユニットが再インスタンス化され、グローバルなパッケージが再初期化されます。 DBMS_SESSION.FREE_ALL_RESOURCESパラメータでMODIFY_PACKAGE_STATEを起動すると、DBMS_SESSION.RESET_PACKAGE()インタフェースと同一の機能が提供されます。

DBMS_SESSION.REINITIALIZE(または2): 実際にメモリーを解放して最初から再作成せずに、パッケージを再初期化します。パッケージ・メモリーは再利用されます。 プログラム・セマンティクスとしては、DBMS_SESSION.REINITIALIZEフラグはDBMS_SESSION.FREE_ALL_RESOURCESフラグと同様、すべてのパッケージを再初期化します。

ただし、次の理由により、DBMS_SESSION.REINITIALIZEDBMS_SESSION.FREE_ALL_RESOURCESオプションよりも高いパフォーマンスを提供します。

  • パッケージは、実際にメモリーを解放して始めから再作成せずに再初期化されます。パッケージ・メモリーは再利用されます。

  • 意味的には、すべてのオープンなカーソルはクローズされます。ただし、カーソル・リソースは実際には解放されていません。リソースは、単にPL/SQLのカーソル・キャッシュに戻ります。このカーソル・キャッシュはフラッシュされません。したがって、PL/SQLで頻繁にアクセスされる静的SQLに対応するカーソルは、PL/SQLカーソル・キャッシュにキャッシュされたままになり、その後使用するPL/SQL文では、新規カーソルのオープン、解析およびクローズに関わるアプリケーションへのオーバーヘッドがありません。

  • グローバルな状態でないPL/SQLモジュール(タイプやストアド・プロシージャなど)のセッション・メモリーは、解放されず、再作成されません。


使用上の注意

各フラグの相違点およびDBMS_SESSION.REINITIALIZEDBMS_SESSION.FREE_ALL_RESOURCESよりも高いパフォーマンスを示す理由は、表117-13のパラメータの説明を参照してください。

表117-12 MODIFY_PACKAGE_STATEのaction_flags定数

定数 説明

FREE_ALL_RESOURCES

PLS_INTEGER:= 1

REINITIALIZE

PLS_INTEGER:= 2


ここでは、DBMS_SESSION.MODIFY_PACKAGE_STATEの使用例を示します。グローバルな状態(カーソルはc、変数値はcnt)のパッケージPを想定します。パッケージの最初の初期化では、パッケージ変数cnt0、カーソルcCLOSEDです。次に、セッションで、cntの値が111に変更され、OPEN操作もカーソルで実行されます。 print_statusをコールしてパッケージの状態を表示すると、cnt111で、カーソルがOPENであることを確認できます。 次に、DBMS_SESSION.MODIFY_PACKAGE_STATEをコールします。 print_statusを使用してパッケージPの状態を再度出力すると、cntが再度0になり、カーソルがCLOSEDされていることを確認できます。 DBMS_SESSION.MODIFY_PACKAGE_STATEのコールが行われなかった場合は、2番目のprint_statusによって、111およびOPENが出力されます。

create or replace package P is
  cnt    number := 0;
  cursor c is select * from emp;
  procedure print_status;
end P;
/
show errors;

create or replace package body P is
  procedure print_status is
  begin
    dbms_output.put_line('P.cnt = ' || cnt);
    if c%ISOPEN then
      dbms_output.put_line('P.c is OPEN');
    else
      dbms_output.put_line('P.c is CLOSED');
    end if;
  end;
end P;
/
show errors;

SQL> set serveroutput on;
SQL> begin
  2   P.cnt := 111;
  3   open p.c;
  4   P.print_status;
  5  end;
  6  /
P.cnt = 111
P.c is OPEN

PL/SQL procedure successfully completed.

SQL> begin
  2   dbms_session.modify_package_state(dbms_session.reinitialize);
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> set serveroutput on;
SQL>
SQL> begin
  2   P.print_status;
  3  end;
  4  /
P.cnt = 0
P.c is CLOSED

PL/SQL procedure successfully completed.

SESSION_TRACE_DISABLEプロシージャ

このプロシージャは、コール元のセッションに対するセッション・レベルのSQLトレースを再設定します。クライアントID、およびサービス、モジュール、アクションのトレースは影響を受けません。

構文

DBMS_SESSION.SESSION_TRACE_ENABLE();

SESSION_TRACE_ENABLEプロシージャ

このプロシージャは、コール元のセッションに対するセッション・レベルのSQLトレースを使用可能にします。このプロシージャを起動すると、セッションによって発行されたすべてのSQL文のSQLトレースが実行されます。

構文

DBMS_SESSION.SESSION_TRACE_ENABLE(
   waits     IN   BOOLEAN DEFAULT TRUE,��
   binds     IN   BOOLEAN DEFAULT FALSE,
   �plan_stat IN   VARCHAR2 DEFAULT NULL);

パラメータ

表117-13 SESSION_TRACE_ENABLEプロシージャのパラメータ

パラメータ 説明

waits

待機情報をトレースするかどうかを指定します。

binds

バインド情報をトレースするかどうかを指定します。

plan_stat

行ソース統計をダンプする頻度。値は'NEVER'、'FIRST_EXECUTION'(NULLと同じ)または'ALL_EXECUTIONS'です。



RESET_PACKAGEプロシージャ

このプロシージャは、このセッションのすべてのパッケージのインスタンス化を解除します。このプロシージャは、パッケージ状態を解放します。


注意:

詳細は、「SESSION_TRACE_ENABLEプロシージャ」を参照してください。 Oracle9i で導入されているMODIFY_PACKAGE_STATEインタフェースでは、RESET_PACKAGEと同一の機能を提供します。この機能は、セッションでPL/SQLパッケージの状態を再初期化するための、効率的で軽量なバリアントです。

実行状態をキャッシュするために使用するメモリーは、セッションで実行されたPL/SQLファンクション、プロシージャおよびパッケージに関連付けられています。

パッケージに関して、このメモリーのコレクションはパッケージ変数の現行の値を保持し、各PL/SQLプログラムがオープンしたカーソルのキャッシュを制御します。 RESET_PACKAGEへのコールは、以前実行した各PL/SQLプログラムに関連付けられていたメモリーをセッションから解放します。したがって、グローバルなパッケージの現行の値は消去され、キャッシュされたカーソルがクローズします。

RESET_PACKAGEは、セッションで失敗したプログラムを確実に再起動するためにも使用できます。パッケージ変数を含んだプログラムが失敗すると、どの変数を初期化しなおす必要があるかを判別することは困難です。 RESET_PACKAGEは、すべてのパッケージ変数が初期値に再設定されることを保証します。

構文

DBMS_SESSION.RESET_PACKAGE;

使用上の注意

すべての実行PL/SQLが消費するメモリーは大量になるため、RESET_PACKAGEを使用して、データベース・アプリケーション内のある時点でセッション・メモリー・フットプリントを削減できます。ただし、パッケージ変数値の再設定がアプリケーションに影響を与えないことを確認してください。また、キャッシュしたメモリーとカーソルのないプログラムを後で実行すると、解放されたメモリーとカーソルを再作成する必要があるため、実行速度が遅くなることに留意してください。

RESET_PACKAGEは、メモリー、カーソルおよびパッケージ変数をコール直後に解放しません。


注意:

RESET_PACKAGEは、起動したPL/SQLコールの実行が完了した後でのみ、メモリー、カーソルおよびパッケージ変数を解放します。

たとえば、PL/SQLプロシージャP1がPL/SQLプロシージャP2をコールし、P2RESET_PACKAGEをコールしたとします。 プロシージャP1の実行が完了するまで(PL/SQLコールが終了するまで)、RESET_PACKAGEの処理は行われません。

SQL*Plusスクリプトは、多数のPL/SQLプログラム・ユニットを伴った大きいプログラムを実行します。これらのプログラム・ユニットでは、グローバル変数を使用する場合もしない場合もあります。ただし、実行後はグローバル変数は必要ありません。

EXCECUTE large_plsql_program1;

キャッシュされたPL/SQLセッション・メモリーを解放します。

EXECUTE DBMS_SESSION.RESET_PACKAGE;

別の大きいプログラムを実行します。

EXECUTE large_plsql_program2;

SET_CONTEXTプロシージャ

このプロシージャは、4つのタイプのコンテキスト(セッション・ローカル、グローバルな初期化、外部的な初期化およびグローバルなアクセス)を設定します。

次の5つのパラメータのうち、最初の3つのみが必須パラメータです。後の2つのパラメータはオプションで、グローバルなアクセスのコンテキストのみで使用されます。パラメータ情報の詳細は、パラメータ表および「使用上の注意」に示されています。

構文

DBMS_SESSION.SET_CONTEXT (
   namespace VARCHAR2,
   attribute VARCHAR2,
   value     VARCHAR2,
   username  VARCHAR2,
   client_id VARCHAR2 );

パラメータ

表117-14 SET_CONTEXTプロシージャのパラメータ

パラメータ 説明

namespace

設定するアプリケーション・コンテキストのネームスペース(30バイトに制限)。

attribute

設定するアプリケーション・コンテキストの属性(30バイトに制限)。

value

設定するアプリケーション・コンテキストの値(4キロバイトに制限)。

username

アプリケーション・コンテキストのデータベース・ユーザー名属性。

デフォルト: NULL

client_id

アプリケーション・コンテキストのアプリケーション固有のclient_id属性(最大64バイト)。

デフォルト: NULL


使用上の注意

次の点に注意してください。


関連項目:

詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
  • ユーザー名およびクライアントIDの設定に関する項

  • クライアントのセッションIDを使用するグローバル・アプリケーション・コンテキストの作成の例に関する項



SET_IDENTIFIERプロシージャ

このプロシージャは、セッションのクライアントIDを設定します。

構文

DBMS_SESSION.SET_IDENTIFIER (
   client_id VARCHAR2);

パラメータ

表117-15 SET_IDENTIFIERプロシージャのパラメータ

パラメータ 説明

client_id

現行のデータベース・セッションのアプリケーション固有の識別子。


使用上の注意

次の点に注意してください。


SET_NLSプロシージャ

このプロシージャは、グローバリゼーション・サポート(NLS)を設定します。このプロシージャは、次のSQL文と同じです。

ALTER SESSION SET <nls_parameter> = <value>

構文

DBMS_SESSION.SET_NLS (
   param VARCHAR2,
   value VARCHAR2);

パラメータ

表117-16 SET_NLSプロシージャのパラメータ

パラメータ 説明

param

グローバリゼーション・サポートのパラメータ。このパラメータ名は、'NLS'で開始する必要があります。

value

パラメータ値。

パラメータがテキスト・リテラルの場合は、埋込みの一重引用符が必要です。 たとえば、次のように指定します。"set_nls ('nls_date_format','''DD-MON-YY''')"



SET_ROLEプロシージャ

このプロシージャは、ロールを使用可能または使用禁止にします。このプロシージャは、SET ROLE SQL文と同じです。

構文

DBMS_SESSION.SET_ROLE (
   role_cmd VARCHAR2);

パラメータ

表117-17 SET_ROLEプロシージャのパラメータ

パラメータ 説明

role_cmd

このテキストは"set role"に追加され、SQLとして実行されます。


使用上の注意

このプロシージャは、既存のトランザクション内からコールされない場合、新しいトランザクションを作成することに注意してください。


SET_SQL_TRACEプロシージャ

このプロシージャは、トレースをオンまたはオフにします。このプロシージャは、次のSQL文と同じです。

ALTER SESSION SET SQL_TRACE ...

構文

DBMS_SESSION.SET_SQL_TRACE (
   sql_trace boolean);

パラメータ

表117-18 SET_SQL_TRACEプロシージャのパラメータ

パラメータ 説明

sql_trace

TRUEはトレースをオンにし、FALSEはトレースをオフにします。



SWITCH_CURRENT_CONSUMER_GROUPプロシージャ

このプロシージャは、ユーザーの現行のセッションでの現行のリソース・コンシューマ・グループを変更します。

ある特定のグループに対して切替え権限がある場合は、コンシューマ・グループを切り替えることができます。コール元が別のプロシージャの場合、ユーザーは、そのプロシージャの所有者が切替え権限を持っているコンシューマ・グループに切り替えることができます。

構文

DBMS_SESSION.switch_current_consumer_group (
   new_consumer_group     IN  VARCHAR2,
   old_consumer_group     OUT VARCHAR2,
   initial_group_on_error IN  BOOLEAN);

パラメータ

表117-19 SWITCH_CURRENT_CONSUMER_GROUPプロシージャのパラメータ

パラメータ 説明

new_consumer_group

切り替える先のコンシューマ・グループの名前。

old_consumer_group

切り替える元のコンシューマ・グループの名前。

initial_group_on_error

TRUEの場合は、エラー発生時にコール元の現行のコンシューマ・グループが初期コンシューマ・グループとして設定されます。


戻り値

このプロシージャは、old_consumer_groupパラメータにある、ユーザーの古いコンシューマ・グループを出力します。


注意:

old_consumer_groupで戻された値を使用して、古いコンシューマ・グループに後で切り替えることができます。

例外

表117-20 SWITCH_CURRENT_CONSUMER_GROUPプロシージャの例外

例外 説明

29368

コンシューマ・グループが存在しません。

1031

権限が不十分です。

29396

OTHER_GROUPSコンシューマ・グループに切り替えることができません。


使用上の注意

プロシージャの所有者には、ユーザーを古いコンシューマ・グループに再切替えするために、ユーザーの古いグループ(old_consumer_group)に対する権限が必要です。このプロシージャには1つの例外があり、ユーザーを初期コンシューマ・グループにいつでも切り替えることができます(権限チェックはスキップ)。

initial_group_on_errorTRUEに設定すると、SWITCH_CURRENT_CONSUMER_GROUPプロシージャは、new_consumer_groupが指定したグループに現行のセッションを設定できない場合、そのセッションをデフォルト・グループに設定します。 現行のコンシューマ・グループが初期コンシューマ・グループに変更されていても、new_consumer_groupへのセッションの移動に関連するエラーは発生します。

CREATE OR REPLACE PROCEDURE high_priority_task is
   old_group varchar2(30);
   prev_group varchar2(30);
   curr_user varchar2(30);
BEGIN
  -- switch invoker to privileged consumer group. If we fail to do so, an
  -- error will be thrown, but the consumer group will not change
  -- because 'initial_group_on_error' is set to FALSE

  dbms_session.switch_current_consumer_group('tkrogrp1', old_group, FALSE);
  -- set up exception handler (in the event of an error, we do not want to
  -- return to caller while leaving the session still in the privileged
  -- group)

  BEGIN
    -- perform some operations while under privileged group

  EXCEPTION
    WHEN OTHERS THEN
     -- It is possible that the procedure owner does not have privileges
     -- on old_group. 'initial_group_on_error' is set to TRUE to make sure
     -- that the user is moved out of the privileged group in such a
     -- situation

     dbms_session.switch_current_consumer_group(old_group,prev_group,TRUE);
     RAISE;
    END;

  -- we've succeeded. Now switch to old_group, or if cannot do so, switch
  -- to caller's initial consumer group

  dbms_session.switch_current_consumer_group(old_group,prev_group,TRUE);
END high_priority_task;
/

UNIQUE_SESSION_IDファンクション

このファンクションは、データベースに現在接続しているすべてのセッションに対して一意の識別子を戻します。同じセッション中にこのファンクションを複数回コールしても、常に同じ結果が戻されます。

構文

DBMS_SESSION.UNIQUE_SESSION_ID
  RETURN VARCHAR2;

プラグマ

pragma restrict_references(unique_session_id,WNDS,RNDS,WNPS);

戻り値

表117-21 UNIQUE_SESSION_IDファンクションの戻り値

戻り値 説明

unique_session_id

最大24バイトまで戻します。