oralce数据库中,对于userenv这个方法我倒是很少见用(不是因为用的少,而是系统本身可能已经用了,开发人员无需再处理),今天在看EBS注册应用的SQL代码时发现了下面的这段代码,这才注意到了userenv的用法,从而在网上搜集了相关资料,最后总结了这篇文章。
-- EBS系统中有关创建应用视图的一段代码CREATE OR REPLACE VIEW FND_APPLICATION_VL ASSELECT b.rowid row_id, b.application_id, b.application_short_name, b.last_update_date, b.last_updated_by, b.creation_date, b.created_by, b.last_update_login, b.basepath, t.application_name, t.description, b.product_code FROM fnd_application_tl t, fnd_application b WHERE b.application_id = t.application_id AND t.language = userenv('LANG'); -- 在这里用到了userenv('LANG'),主要实现的是获取客户端语言
下面这篇总结修改自“小波Ooo”的《oracle中的userenv()》,只做学习、交流之用:
1、userenv
userenv用于返回当前用户环境的信息,opt可以是ENTRYID、SESSIONID、TERMINAL、ISDBA、LABLE、LANGUAGE、CLIENT_INFO、LANG、VSIZE。 (1)ISDBA:查看当前用户是否是DBA,如果是DBA,则返回true,否则返回false。
(2)SESSIONID:返回会话ID。 (3)ENTRYID:返回会话入口ID。
(4)INSTANCE:返回当前INSTANCE的标识。 (5)LANGUAGE:返回当前语言的环境变量。 (6)LANG:返回当前环境的语言的缩写。 (7)TERMINAL:返回用户的终端或机器的标识。 (8)VSIZE(X):返回X的大小(字节)数。 如:SELECT vsize(USER), USER FROM dual; 2、sys_context - -- 有关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;
复制代码userenv和sys_context都可以实现类似的功能,具体的在开发的时候使用哪一个,userenv函数是旧版本使用的函数,8i以后都建议使用sys_context,开发的时候注意下就好。
|