説明
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