修改 USERENV('LANG')傳回值
SQL> ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
Session altered.
SQL> select USERENV('LANG') from dual;
USERENV('LANG')
----------------------------------------------------
US
SQL> ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
會話已更改。
SQL> select USERENV('LANG') from dual;
USERENV('LANG')
----------------------------------------------------
ZHS
SQL>
過程修改為:
execute immediate 'ALTER SESSION SET NLS_LANGUAGE = ''SIMPLIFIED CHINESE''';
SYS_CONTEXT 函數傳回是與上下文名稱空間相關的屬性值。這個函數可以用在SQL和PL/SQL語句中。
注意: SYS_CONTEXT 傳回的是使用者會話期間的屬性,是以,你無法使用它在并行的查詢或實時應用叢集環境。
對于名稱空間和變量, 你可以定義它(們)為常量字元串,也可以定義一個變量,來代替名稱空間或屬性的字元串。名稱空間必須是已經在資料庫中定義好的, 并且相關的參數和值已經被指定到DBMS_SESSION中。名稱空間必須是一個合法的SQL辨別符。變量名字可以是任意的字元串。它們不區分大小寫, 但是長度不能超出30個位元組。
函數傳回的資料類型是VARCHAR2,回歸值的預設最大長度是256個位元組。你也可以通過設定函數參數length來修改這個預設長度值。值的合法的長度範圍是1到4000位元組。(如果你指定的值不在這個範圍内, Oracle将使用預設長度。)
Oracle9i 提供了一個内置的“USERENV”名稱空間, 用來表示目前的會話資訊。該名稱空間預定義的參數如表1, 表的最後一列辨別了傳回值的長度。
文法:
SYS_CONTEXT(namespace, attribute[, length])
表1:USERENV表空間預定義的屬性
Parameter | Return Value | Return Length (bytes) |
AUDITED_CURSORID | 傳回目前觸發查檢要SQL的遊标ID | NA |
AUTHENTICATION_DATA | 使用者認證資料。 經過X.503 認證确定的會話,該屬性以HEX2格式傳回上下文認證資訊 注意:可以通過length參數改變 AUTHENTICATION_DATA屬性傳回的長度值。 長度上限是4000。這是Oracle 名稱空間USERENV僅有變化的屬性 | 256 |
AUTHENTICATION_TYPE | 使用者誰類型: <!--[if !supportLists]-->ü <!--[endif]-->DATABASE:使用者名/密碼 認證 <!--[if !supportLists]-->ü <!--[endif]-->OS:作業系統使用者 認證 <!--[if !supportLists]-->ü <!--[endif]-->NETWORK:網絡協定或ANO認證 <!--[if !supportLists]-->ü <!--[endif]-->PROXY:OCI連接配接代理認證 | 30 |
BG_JOB_ID | 在目前會話中由Oracle背景程序建立的Job ID. 如果目前會話中沒有背景程序建立任何JOB,則傳回空 | 30 |
CLIENT_IDENTIFIER | 傳回用戶端在全局上下文中的辨別,包括可以被全局被通路的上下文或者在OCI上下文中的 OCI_ATTR_CLIENT_IDENTIFIER 屬性。 如沒有相關辨別,則傳回空 | 64 |
CLIENT_INFO | 傳回使用者會話資訊,該資訊最多64位元組,這些資訊是應用程式通過 DBMS_APPLICATION_INFO包package設定的 | 64 |
CURRENT_SCHEMA | 目前模式名。該值可以通過ALTER SESSION SET CURRENT_SCHEMA來改變 | 30 |
CURRENT_SCHEMAID | 目前預設會話模式辨別 | 30 |
CURRENT_SQL | 目前會話中最近執行的SQL。 隻能通過 内置事件Fine-Grained Auditing 屬性指定該屬性 | 64 |
CURRENT_USER | 目前登入的使用者名 | 30 |
CURRENT_USERID | 目前登入的使用者ID | 30 |
DB_DOMAIN | 目前資料庫所在域 | 256 |
DB_NAME | 目前資料庫名 | 30 |
ENTRYID | 預設實體辨別。它可以用于分布式SQL中。如果在USERENV想使用該屬性,必須将AUDIT_TRAIL初始為true。 | 30 |
EXTERNAL_NAME | 目前會話使用者的外部名字。對于使用v.503 認證SSL的會話,該值傳回包含使用者認證資訊的名字(DN) | 256 |
FG_JOB_ID | 目前會話執行的JOB的辨別,如果沒有則傳回空 | 30 |
GLOBAL_CONTEXT_MEMORY | 傳回全局區域中使用的記憶體數 | NA |
HOST | 客戶機的名字 | 54 |
INSTANCE | 目前執行個體的數量 | 30 |
IP_ADDRESS | 用戶端的IP位址 | 30 |
ISDBA | 傳回目前使用者是否有DBA權限 | 30 |
LANG | 傳回目前使用者會話使用的語言縮寫,該縮寫遵循ISO規定 | 62 |
LANGUAGE | 目前使用者使用的語言,包括目前資料庫的字元集,并遵循如下格式: language_territory.characterset | 52 |
NETWORK_PROTOCOL | 目前用戶端連接配接資料庫的通路協定 | 256 |
NLS_CALENDAR | 目前會話月曆 | 62 |
NLS_CURRENCY | 目前會話貨币種類 | 62 |
NLS_DATE_FORMAT | 目前會話日期格式 | 62 |
NLS_DATE_LANGUAGE | 描述目前日期格式的語言 | 62 |
NLS_SORT | 排序規則,BINARY或按語言排序 | 62 |
NLS_TERRITORY | 目前會話區域 | 62 |
OS_USER | 目前會話使用者在作業系統裡的使用者名 | 30 |
PROXY_USER | 代理使用者名 | 30 |
PROXY_USERID | 代理使用者辨別 | 30 |
SESSIONID | 會話辨別 | 30 |
TERMINAL | 目前會話用戶端作業系統辨別。分布式SQL中該屬性隻傳回你所對應會話的辨別。分布式會話中隻支援SELECT操作,不支援INSERT,UPDATE,DELETE 操作。(傳回值的長度可能由于不同的作業系統有所不同) | 10 |
例子:
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;
下面的語句傳回登入使用者的名字:
CONNECT OE/OE
SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER')
FROM DUAL;
SYS_CONTEXT ('USERENV', 'SESSION_USER')
------------------------------------------------------
OE
下面的例子假設已經在PL/SQL包中設定了hr_apps名稱空間,并設定了group_no屬性,該查詢傳回這個屬性值:
SELECT SYS_CONTEXT ('hr_apps', 'group_no') "User Group"
FROM DUAL;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29446986/viewspace-1337771/,如需轉載,請注明出處,否則将追究法律責任。
轉載于:http://blog.itpub.net/29446986/viewspace-1337771/