修改 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/