使用SYS_CONTEXT

indexman發表於2015-09-20

使用SYS_CONTEXT

1、什麼是SYS_CONTEXT?
SYS_CONTEXT 函式是Oracle提供的一個獲取環境上下文資訊的預定義函式。
該函式用來返回一個指定namespace下的parameter值。該函式可以在SQL和PL/SQL語言中使用。

上下文定義
(a set of application-defined attributes that validates and secures an application 一組由應用程式定義的屬性用於驗證和保護應用。)

2、語法
SYS_CONTEXT 語法格式:SYS_CONTEXT(‘namespace’,’parameter’{,LENGTH});

其中,namespace是儲存資訊的一個組group單位,namespace是按照類別進行分類的。
一個namespace下可以有多個引數值,通過不同的parameter進行區分。namespace是預先定義好的SQL識別符號,而parameter是可以任意大小寫非敏感的字串,不超過30位長度。
函式返回值為varchar2型別,長度預設為256位。如果需要限制這個預設值,可以資料length引數作為新的返回長度值。

3、預定義的namespace – USERENV
常用parameters:

SELECT SYS_CONTEXT ('USERENV', 'TERMINAL') terminal, 
       SYS_CONTEXT ('USERENV', 'LANGUAGE') language, 
       SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid, 
       SYS_CONTEXT ('USERENV', 'INSTANCE') instance, 
       SYS_CONTEXT ('USERENV', 'ENTRYID') entryid, 
       SYS_CONTEXT ('USERENV', 'ISDBA') isdba, 
       SYS_CONTEXT ('USERENV', 'NLS_TERRITORY') nls_territory, 
       SYS_CONTEXT ('USERENV', 'NLS_CURRENCY') nls_currency, 
       SYS_CONTEXT ('USERENV', 'NLS_CALENDAR') nls_calendar, 
       SYS_CONTEXT ('USERENV', 'NLS_DATE_FORMAT') nls_date_format, 
       SYS_CONTEXT ('USERENV', 'NLS_DATE_LANGUAGE') nls_date_language, 
       SYS_CONTEXT ('USERENV', 'NLS_SORT') nls_sort, 
       SYS_CONTEXT ('USERENV', 'CURRENT_USER') current_user, 
       SYS_CONTEXT ('USERENV', 'CURRENT_USERID') current_userid, 
       SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user, 
       SYS_CONTEXT ('USERENV', 'SESSION_USERID') session_userid, 
       SYS_CONTEXT ('USERENV', 'PROXY_USER') proxy_user, 
       SYS_CONTEXT ('USERENV', 'PROXY_USERID') proxy_userid, 
       SYS_CONTEXT ('USERENV', 'DB_DOMAIN') db_domain, 
       SYS_CONTEXT ('USERENV', 'DB_NAME') db_name, 
       SYS_CONTEXT ('USERENV', 'HOST') HOST, 
       SYS_CONTEXT ('USERENV', 'OS_USER') os_user, 
       SYS_CONTEXT ('USERENV', 'EXTERNAL_NAME') external_name, 
       SYS_CONTEXT ('USERENV', 'IP_ADDRESS') ip_address, 
       SYS_CONTEXT ('USERENV', 'NETWORK_PROTOCOL') network_protocol, 
       SYS_CONTEXT ('USERENV', 'BG_JOB_ID') bg_job_id, 
       SYS_CONTEXT ('USERENV', 'FG_JOB_ID') fg_job_id, 
       SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE') authentication_type, 
       SYS_CONTEXT ('USERENV', 'AUTHENTICATION_DATA') authentication_data 
  FROM DUAL;

4、建立自定義上下文–CREATE CONTEXT

SQL> create context test using set_test_context;

Context created.

SQL> create or replace procedure set_test_context(value in varchar2) is 
  2  begin 
  3  dbms_session.set_context('test','key',value); 
  4  end set_test_context; 
  5  /

Procedure created.

SQL> exec set_test_context('This is a context set value!');

PL/SQL procedure successfully completed.

SQL> select sys_context('test','key') show_value from dual;

SHOW_VALUE 
-------------------------------------------------------------------
This is a context set value!

更多資訊請參考:
SYS_CONTEXT
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm

CREATE CONTEXT
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5002.htm#i2060927

相關文章