oracle中userenv、sys_context用法小结

oracle数据库中,对于userenv这个方法我倒是很少见用(不是因为用的少,而是系统本身可能已经用了,开发人员无需再处理),今天在看EBS注册应用的SQL代码时发现了下面的这段代码,这才注意到了userenv的用法,从而在网上搜集了相关资料,最后总结了这篇文章。

-- EBS系统中有关创建应用视图的一段代码
CREATE OR REPLACE VIEW FND_APPLICATION_VL AS
SELECT 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,开发的时候注意下就好。

本文标题:oracle中userenv、sys_context用法小结

本文链接:http://yedward.net/?id=134

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章