天天看點

SYS_CONTEXT 詳細用法

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;

SYS_CONTEXT 函數是Oracle提供的一個擷取環境上下文資訊的預定義函數。

該函數用來傳回一個指定namespace下的parameter值。該函數可以在SQL和PL/SQL語言中使用。

SYS_CONTEXT 實際上就是一個Oracle存儲和傳遞參數的容器通路函數。

我們登入Oracle伺服器,是帶有會話資訊session_info和其他一些屬性資訊。

其中,有一些是Oracle預定義的,登入系統的時候自動填入到指定的變量中。還有一些是我們自己定義到其中,用于傳遞值使用的。

SYS_CONTEXT 文法格式:SYS_CONTEXT('namespace','parameter'{,LENGTH});

其中,namespace是存儲資訊的一個組group機關,namespace是按照類别進行分類的。

一個namespace下可以有多個參數值,通過不同的parameter進行區分。namespace是預先定義好的SQL辨別符,而parameter是可以任意大小寫非敏感的字元串,不超過30位長度。

函數傳回值為varchar2類型,長度預設為256位。如果需要限制這個預設值,可以資料length參數作為新的傳回長度值。

設定namespace指定parameter值,可以使用dbms_session.set_context方法進行。

[[email protected] ~]$ sqlplus apps/apps

SQL*Plus: Release 11.1.0.7.0 - Production on Thu Oct 30 20:23:36 2014

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

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!