SYS_CONTEXT
構文
目的
SYS_CONTEXTは、現行のインスタンスのコンテキストnamespaceに関連付けられたparameterの値を戻します。この関数は、SQL文とPL/SQL文の両方で使用できます。SYS_CONTEXTはローカルに実行する必要があります。
                  
namespaceおよびparameterには、文字列、またはネームスペースまたは属性を指定する文字列に変換する式を指定できます。namespaceおよびparameterにリテラル引数を指定し、(SQL文で指定されたPL/SQLファンクション内ではなく)SQL文で明示的にSYS_CONTEXTを使用した場合は、SYS_CONTEXTファンクションを起動するコール元の各サイトで、SQL文の実行ごとに1回のみSYS_CONTEXTが評価されます。 
                  
コンテキストnamespaceはすでに作成されている必要があり、関連付けられたparameterおよびその値は、DBMS_SESSION.set_contextプロシージャを使用して設定されている必要があります。namespaceは有効な識別子である必要があります。parameter名には、すべての文字列を指定できます。大/小文字は区別されず、長さは30バイト以下です。
                  
戻り値のデータ型はVARCHAR2です。戻り値のデフォルトの最大サイズは256バイトです。オプションのlengthパラメータを指定して、このデフォルトを上書きできます。このパラメータは、NUMBERか、または暗黙的にNUMBERに変換可能な値である必要があります。有効な値の範囲は、1から4000バイトです。無効な値を指定すると、Oracle Databaseはその値を無視してデフォルト値を使用します。
                  
Oracleは、次の組込みネームスペースを提供しています。
- 
                        
USERENV: 現在のセッションを説明します。ネームスペースUSERENVの事前定義パラメータについては、表7-11を参照してください。 - 
                        
SYS_SESSION_ROLES: 指定されたロールがセッションに対して現在有効かどうかを示します。Oracle Databaseは、現在のユーザーのSYS_SESSION_ROLESコンテキストを評価し、定義者の権限プロシージャまたはファンクション内でSYS_SESSION_ROLESを評価するときに、定義ユーザーのロールとみなします。SYS_SESSION_ROLESを使用して、定義者権限プロシージャでログイン・ユーザーの有効なロールを検索するかわりに、DBMS_SESSION:SESSION_IS_ROLE_ENABLEDファンクションを使用することもできます。実行者権限、プロシージャまたはファンクション、あるいはコード・ベース・アクセス制御(CBAC)も代替手段です。 
関連項目:
- 
                           
アプリケーション開発でのアプリケーション・コンテキスト機能の使用方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。
 - 
                           
ユーザー定義のコンテキスト・ネームスペースの作成方法については、「CREATE CONTEXT」を参照してください。
 - 
                           
DBMS_SESSION.set_contextプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 - 
                           
SYS_CONTEXTの文字の戻り値に割り当てる照合を定義する照合導出ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。 
例
次の例では、データベースにログインしたユーザー名を戻します。
CONNECT OE
Enter password: password
SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') 
   FROM DUAL;
SYS_CONTEXT ('USERENV', 'SESSION_USER')
---------------------------------------
OE
次の例では、SESSION_ROLESデータ・ディクショナリ・ビューを問い合せて、セッションに対して現在有効なロールがRESOURCEのみであることを示します。その後で、SYS_CONTEXTファンクションを使用して、セッションに対してRESOURCEロールが現在有効であり、DBAロールが有効でないことを示します。
                  
CONNECT OE
Enter password: password
SELECT role FROM session_roles;
ROLE
--------
RESOURCE
SELECT SYS_CONTEXT('SYS_SESSION_ROLES', 'RESOURCE')
  FROM DUAL
SYS_CONTEXT('SYS_SESSION_ROLES','RESOURCE')
--------------------------------------
TRUE
SELECT SYS_CONTEXT('SYS_SESSION_ROLES', 'DBA')
  FROM DUAL;
SYS_CONTEXT('SYS_SESSION_ROLES','DBA')
--------------------------------------
FALSE
ノート:
この機能を簡単に実演する場合、これらの例では、通常デプロイされたシステムが使用するパスワード管理技術を実行しません。本番環境では、Oracle Databaseのパスワード管理ガイドラインに従い、サンプル・アカウントを無効にしてください。パスワード管理ガイドラインおよびその他のセキュリティ上の推奨事項については、『Oracle Databaseセキュリティ・ガイド』を参照してください。
次の例では、hr_appsの作成時に、コンテキストhr_appsに関連付けられたPL/SQLパッケージの属性group_noに対する値として設定されたグループ番号を戻します。 
                  
SELECT SYS_CONTEXT ('hr_apps', 'group_no') "User Group" 
   FROM DUAL;
表7-11 ネームスペースUSERENVの事前定義パラメータ
| パラメータ | 戻り値 | 
|---|---|
| 
                               
  | 
                           
                               モジュール(アプリケーション名)内の位置を識別します。  | 
                        
| 
                               
  | 
                           
                               監査をトリガーによって実行したSQLのカーソルIDを戻します。このパラメータは、ファイングレイン監査環境では無効です。このパラメータをファイングレイン監査環境で指定すると、Oracle Databaseは常にNULLを戻します。  | 
                        
| 
                               
  | 
                           
                               認証で使用する識別を戻します。次のリストでは、ユーザーのタイプの後に、戻される値を示します。 
  | 
                        
| 
                               
  | 
                           
                               ログイン・ユーザーの認証に使用されるデータを戻します。X.503認証セッションでは、このフィールドはHEX2形式での認証のコンテキストを戻します。 ノート: 構文の  | 
                        
| 
                               
  | 
                           
                               認証方式を戻します。次に、ユーザー・タイプの後に返される方式を続けて示します。 
 管理接続以外では、認証方式がPASSWORD、KERBEROSまたはSSLの場合、  | 
                        
| 
                               
  | 
                           
                               現行のセッションがOracle Databaseのバックグラウンド・プロセスで確立された場合、そのセッションのジョブIDを戻します。セッションがバックグラウンド・プロセスで確立されていない場合は、NULLを戻します。  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               マルチテナント・コンテナ・データベース(CDB)に接続しているときに問合せが実行されると、CDBの名前を戻します。それ以外の場合は、nullを戻します。  | 
                        
| 
                               
  | 
                           
                               アプリケーションによって設定された識別子を、  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               データベース・セッションに使用されるプログラムの名前。  | 
                        
| 
                               
  | 
                           
                               CDBに接続しているときに問合せが実行されると、現在のコンテナIDを戻します。それ以外の場合は0を戻します。  | 
                        
| 
                               
  | 
                           
                               CDBに接続しているときに問合せが実行されると、現在のコンテナ名を戻します。それ以外の場合は、  | 
                        
| 
                               
  | 
                           
                               ファイングレイン監査のバインド変数。この属性は、ファイングレイン監査機能のイベント・ハンドラ内のみで指定できます。  | 
                        
| 
                               
  | 
                           
                               現行のエディションの識別子。  | 
                        
| 
                               
  | 
                           
                               現行のエディションの名前。  | 
                        
| 
                               
  | 
                           
                               現在アクティブなデフォルトのスキーマの名前。この値は、セッションの存続期間中に ノート: すべての種類(ログオン・トリガーを除く)のストアドPL/SQLユニット内から、SQL文  | 
                        
| 
                               
  | 
                           
                               現在アクティブなデフォルトのスキーマの識別子。  | 
                        
| 
                               
 
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               ファイングレイン監査または行レベルのセキュリティ(RLS)ポリシーのファンクションまたはイベント・ハンドラをトリガーする現行のSQL文の長さ。この属性は、ファイングレイン監査機能のイベント・ハンドラ内のみで指定できます。  | 
                        
| 
                               
  | 
                           
                               現在アクティブな権限を持つデータベース・ユーザー名。これは、Real Application Securityセッションがアタッチまたはデタッチされるときや、アクティブな定義者権限オブジェクトの所有者を反映するために、データベース・セッション中に変化することがあります。定義者権限オブジェクトがアクティブでない場合、 関連項目: ユーザー  | 
                        
| 
                               
  | 
                           
                               権限が現在アクティブになっているデータベース・ユーザーの識別子。  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               サプリメンタル・ロギングが有効になっている場合は、有効なサプリメンタル・ロギング・レベルのリストが含まれている文字列を返します。可能な値は、  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               データベース・リンク・セッションのソースを戻します。具体的には、次の書式の文字列を戻します。 SOURCE_GLOBAL_NAME=dblink_src_global_name, DBLINK_NAME=dblink_name, SOURCE_AUDIT_SESSIONID=説明: 
  | 
                        
| 
                               
  | 
                           
                               現行の監査エントリ番号を戻します。監査エントリIDの順序は、ファイングレイン監査レコードと通常の監査レコードで共通です。この属性を分散SQL文で使用することはできません。正しい監査エントリ識別子は、標準またはファイングレイン監査の監査ハンドラを介してのみ参照できます。  | 
                        
| 
                               
  | 
                           
                               ユーザーのエンタープライズ全体の識別を戻します。 
 属性の値はプロキシ方式によって異なります。 
  | 
                        
| 
                               
  | 
                           
                               
 それ以外の場合は0を戻します。  | 
                        
| 
                               
  | 
                           
                               コンテキストへのグローバルなアクセスによって、システム・グローバル領域で使用された数値を戻します。  | 
                        
| 
                               
  | 
                           
                               エンタープライズ・ユーザー・セキュリティ(EUS)ログインの場合は、Oracle Internet Directoryからグローバル・ユーザーIDを戻します。その他のすべてのログインの場合は、NULLを戻します。  | 
                        
| 
                               
  | 
                           
                               接続中のクライアントのホスト・マシン名を戻します。  | 
                        
| 
                               
  | 
                           
                               データベースでユーザーのスキーマを作成した方法を戻します。特に、 
  | 
                        
| 
                               
  | 
                           
                               現行のインスタンスのインスタンス識別番号を戻します。  | 
                        
| 
                               
  | 
                           
                               インスタンス名。  | 
                        
| 
                               
  | 
                           
                               接続中のクライアントのマシンのIPアドレスを戻します。クライアントとサーバーが同じマシン上にあり、接続にIPv6アドレスが使用されている場合は、  | 
                        
| 
                               
  | 
                           
                               ロジカル・スタンバイ・データベースでSQL Applyサーバーから問合せが実行された場合は、  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               オペレーティング・システムまたはパスワード・ファイルによって、ユーザーがDBA権限を持っていると認証された場合、  | 
                        
| 
                               
  | 
                           
                               言語名の略称を戻します。これは、既存の'  | 
                        
| 
                               
  | 
                           
                               現行のセッションで使用している言語(language)および地域(territory)を、データベース文字セット(character set)も含めて次の書式で戻します。 language_territory.characterset  | 
                        
| 
                               
  | 
                           
                               構成済LDAPサーバー・タイプ(  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               接続文字列の'  | 
                        
| 
                               
  | 
                           
                               現行のセッションの現行のカレンダを戻します。  | 
                        
| 
                               
  | 
                           
                               現行のセッションの通貨を戻します。  | 
                        
| 
                               
  | 
                           
                               セッションの日付書式を戻します。  | 
                        
| 
                               
  | 
                           
                               日付の表示に使用される言語を戻します。  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               現行のセッションの地域を戻します。  | 
                        
| 
                               
  | 
                           
                               Oracleホーム・ディレクトリのフル・パス名。  | 
                        
| 
                               
  | 
                           
                               データベース・セッションを開始するクライアント・プロセスのオペレーティング・システム・ユーザー名を戻します。  | 
                        
| 
                               
  | 
                           
                               OracleのプロセスID。  | 
                        
| 
                               
  | 
                           
                               プラットフォームのパス区切り文字として使用されるスラッシュ(「/」)文字。  | 
                        
| 
                               
  | 
                           
                               行レベルのセキュリティ(RLS)・ポリシーのファンクションの実行者。  | 
                        
| 
                               
  | 
                           
                               プロキシ・ユーザーがエンタープライズ・ユーザーの場合に、Oracle Internet Directory DNを戻します。  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               
  | 
                        
| 
                               
  | 
                           
                               現在のセッションがフォアグラウンド・ジョブまたはバックグラウンド・ジョブに属している場合は、  | 
                        
| 
                               
  | 
                           
                               インスタンスを実行しているマシンのホスト名。  | 
                        
| 
                               
  | 
                           
                               任意のセッションで接続しているサービスの名前を戻します。  | 
                        
| 
                               
  | 
                           
                               セッションのデフォルトの照合。  | 
                        
| 
                               
  | 
                           
                               セッション・エディションの識別子。  | 
                        
| 
                               
  | 
                           
                               セッション・エディションの名前。  | 
                        
| 
                               
  | 
                           
                               セッション・ユーザー(ログオンしたユーザー)の名前。これは、Real Application Securityセッションがアタッチまたはデタッチされると、データベース・セッション中に変化することがあります。エンタープライズ・ユーザーの場合、スキーマを戻します。その他のユーザーの場合、データベース・ユーザー名を戻します。現在のデータベース・セッションにReal Application Securityがアタッチされている場合は、ユーザー 関連項目: ユーザー  | 
                        
| 
                               
  | 
                           
                               セッション・ユーザー(ログオンしたユーザー)のID。  | 
                        
| 
                               
  | 
                           
                               監査セッション識別子を戻します。この属性を分散SQL文で使用することはできません。  | 
                        
| 
                               
  | 
                           
                               セッションID。  | 
                        
| 
                               
  | 
                           
                               文の監査の識別子を戻します。  | 
                        
| 
                               
  | 
                           
                               現行のセッションのクライアントに対するオペレーティング・システムの識別子を戻します。分散SQL文では、この属性はローカル・セッションの識別子を戻します。分散環境では、リモートの  | 
                        
| 
                               
  | 
                           
                               統合監査または混合モード監査を使用するデータベースに接続中に問い合せた場合、統合監査セッションIDを戻します。 従来の監査を使用するデータベースに接続中に問い合せた場合、nullを戻します。  | 
                        
