sys_context獲取當前會話的屬性
修改 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 返回的是使用者會話期間的屬性,所以,你無法使用它在並行的查詢或實時應用叢集環境。
對於名稱空間和變數, 你可以定義它(們)為常量字串,也可以定義一個變數,來代替名稱空間或屬性的字串。名稱空間必須是已經在資料庫中定義好的, 並且相關的引數和值已經被指定到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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 獲取當前會話資訊的方法會話
- 獲取當前會話資訊的方法(二)會話
- 獲取當前會話的trc檔名會話
- 獲取類屬性值,當前類,父類
- JavaScript獲取當前點選元素的id屬性值JavaScript
- oracle獲取當前會話(程式)session id(sid)Oracle會話Session
- 獲取影像的屬性
- JavaScript 獲取當前月份JavaScript
- JavaScript 獲取當前域名JavaScript
- javascript獲取當前urlJavaScript
- php 獲取當前域名和當前協議PHP協議
- opencv 獲取影像的屬性OpenCV
- mybatis獲取當前時間MyBatis
- Java獲取當前星期幾Java
- JQuery獲取當前元素本身jQuery
- java獲取當前時間Java
- Qt獲取當前時間QT
- js獲取當前時間JS
- Qt 獲取當前時間QT
- oracle 10046當前會話Oracle會話
- js如何獲取給定屬性的屬性值JS
- jQuery如何獲取當前元素的索引jQuery索引
- javascript獲取當前的時間戳JavaScript時間戳
- 當前的火狐也支援__proto__屬性
- Oracle查詢當前會話的sidOracle會話
- python 獲取類的屬性Python
- 微信小程式獲取當前位置微信小程式
- Android獲取當前桌面桌布Android
- Flutter 小知識,Key的使用(獲取當前點選Widget位置/獲取當前Widget大小)Flutter
- 檢視當前會話session id方法:會話Session
- Oracle 查詢當前會話標識Oracle會話
- Spark獲取當前分割槽的partitionIdSpark
- 獲取當前Tomcat例項的埠Tomcat
- js獲取當前的具體時間JS
- 點選事件獲取當前li的索引事件索引
- JavaScript獲取當前li元素的索引位置JavaScript索引
- 用js獲取當前月份的天數JS
- jQuery如何獲取當前元素的兄弟元素jQuery