ネームスペースの作成
create contextを使用して、ネームスペースを作成する。ネームスペース作成時には、名前と値を管理するためのPL/SQL(プロシージャやパッケージ)をセットで指定する。
※CREATE ANY CONTEXTシステム権限が必要
sample_ctxネームスペースを作成して、名前と値を管理するためのPL/SQLにはsample_ctx_managerを指定。
この時点では、PL/SQLが存在していなくてもOK
create context sample_ctx using sample_ctx_manager;
名前と値のペアを管理するためのPL/SQLの作成
PL/SQLの名前は、create contextを作成した時の名前にする。dbms_session.set_contextを使ってアプリケーションコンテキストに名前と値のペアを登録できる。
本来は、ログインしたユーザの情報から、DB検索して値の設定をしたりするらしい。
CREATE OR REPLACE PROCEDURE sample_ctx_mgr IS BEGIN dbms_session.set_context( namespace => 'sample_ctx', attribute => 'sample_key', value => 'sample_value' ); END;
PL/SQLの実行
うえで作成したPL/SQL実行することでアプリケーションコンテキストに値を設定できる。セキュリティを高めるためには、安易にexecute権限を付与するとかじゃなくってログイントリガーとかで実現するのがよいらしい。
設定された値の確認
session_contextを参照することで値を確認できる。07:23:44 SQL> r 1* select * from session_context NAMESPACE ATTRIBUTE VALUE ------------------------------ ------------------------------ ------------------------------ SAMPLE_CTX SAMPLE_KEY sample_value
sys_contextを使うと値を抜き出すことができる。
select sys_context('sample_ctx', 'sample_key') from dual;
アプリケーションコンテキストをうまく使うとセキュリティを高めることができるらしい。
(まだ詳しくわかってない。)