説明
CREATE CONTEXT 文は、コンテキスト(アプリケーションが定義する一連の属性で、アプリケーションの検証と保護に使用される)の名前空間を作成したり、その名前空間を外部で作成されたパッケージと関連付けて、そのコンテキストを設定したりすることができます。
ユーザーは、指定されたパッケージ内の DBMS_SESSION.SET_CONTEXT プロシージャを使用して、コンテキストの属性を設定またはリセットします。
注意
コンテキスト名前空間を作成するには、CREATE ANY CONTEXT システム権限が必要です。
構文
CREATE [ OR REPLACE ] CONTEXT namespace
USING [ schema. ] package_name
[ INITIALIZED { EXTERNALLY | GLOBALLY }
| ACCESSED GLOBALLY
] ;
構文の説明
キーワード |
説明 |
|---|---|
| OR REPLACE | 異なるパッケージを使用して既存のコンテキスト名前空間を再定義します。 |
| namespace | 作成または変更するコンテキスト名前空間の名前を指定します。コンテキスト名前空間は常に SYS スキーマに格納されます。 |
| schema | そのパッケージが存在するスキーマを指定します。スキーマを省略した場合、データベースは現在のスキーマを使用します。 |
| package_name | ユーザーの現在のセッションの名前空間でコンテキスト属性を設定またはリセットするPLパッケージを指定します。 |
| ACCESSED GLOBALLY | 名前空間で設定された任意のアプリケーションコンテキストがインスタンス全体からアクセス可能であることを示します。この設定により、複数のセッションでアプリケーション属性を共有できます。 |
例
コンテキスト名前空間
dev_contextを作成します。obclient> CREATE OR REPLACE CONTEXT dev_context USING SYS.DBMS_SESSION ACCESSED GLOBALLY; Query OK, 0 rows affectedSYS_CONTEXT関数を使用して、このコンテキストに基づいてデータアクセスを制御します。以下の例では、emp_mgmtパッケージは属性deptnoを指定された部門識別子として定義しています。deptnoの値に基づくビューを作成することで、ベーステーブルの従業員データへのアクセスを制限できます。obclient> CREATE VIEW dev_emp_view AS SELECT * FROM emp WHERE deptno = SYS_CONTEXT('dev_context', 'deptno'); Query OK, 0 rows affected