説明
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;SYS_CONTEXT関数を使用して、このコンテキストに基づいてデータアクセスを制御します。次の例では、emp_mgmtパッケージはプロパティdeptnoを指定された部門識別子として定義しています。deptno値に基づくビューを作成することで、基となる従業員データへのアクセスを制限できます。-- 最初に emp テーブルを作成 obclient> CREATE TABLE emp ( empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) ); -- コンテキストに基づくビューを作成 obclient> CREATE VIEW dev_emp_view AS SELECT * FROM emp WHERE deptno = SYS_CONTEXT('dev_context', 'deptno');