发布日期:2015-11-06 15:10 来源: 标签: 数据库 oracle教程 oracle函数 oracle Context
context这个词见得还是挺多的,尤其是在计算机领域。大部人将它翻译为上下文,我也就跟随大众吧。比如操作系统中的上下文切换等等。那么上下文到底意味着什么呢?在我看来就是当前程序运行的一个环境信息。举个例子说吧,当一个用户登录oracle之后就会有一个session,这个session中包含了session_id,用户名等等信息,这就是上下文的一些信息。那么,在oracle中怎么查看这个上下文的一些信息呢?
context这个词见得还是挺多的,尤其是在计算机领域。大部人将它翻译为上下文,我也就跟随大众吧。比如操作系统中的上下文切换等等。那么上下文到底意味着什么呢?在我看来就是当前程序运行的一个环境信息。举个例子说吧,当一个用户登录oracle之后就会有一个session,这个session中包含了session_id,用户名等等信息,这就是上下文的一些信息。那么,在oracle中怎么查看这个上下文的一些信息呢?
(1)查看context中的属性信息。
oracle默认的为我们创建了一个context叫userenv(user environment),在这里你可以查看到很多session级别的信息。里面的单词都很简单,相信大家都知道每个属性表示什么意思。
SYS_CONTEXT('USERENV','TERMINAL') 
SYS_CONTEXT('USERENV','LANGUAGE')
SYS_CONTEXT('USERENV','SESSIONID') 
SYS_CONTEXT('USERENV','INSTANCE')
SYS_CONTEXT('USERENV','ENTRYID') 
SYS_CONTEXT('USERENV','ISDBA') 
SYS_CONTEXT('USERENV','NLS_TERRITORY') 
SYS_CONTEXT('USERENV','NLS_CURRENCY')
SYS_CONTEXT('USERENV','NLS_CALENDAR') 
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') 
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') 
SYS_CONTEXT('USERENV','NLS_SORT') 
SYS_CONTEXT('USERENV','CURRENT_USER')
SYS_CONTEXT('USERENV','CURRENT_USERID') 
SYS_CONTEXT('USERENV','SESSION_USER') 
SYS_CONTEXT('USERENV','SESSION_USERID') 
SYS_CONTEXT('USERENV','PROXY_USER') 
SYS_CONTEXT('USERENV','PROXY_USERID') 
SYS_CONTEXT('USERENV','DB_DOMAIN') 
SYS_CONTEXT('USERENV','DB_NAME') 
SYS_CONTEXT('USERENV','HOST') 
SYS_CONTEXT('USERENV','OS_USER') 
SYS_CONTEXT('USERENV','EXTERNAL_NAME') 
SYS_CONTEXT('USERENV','IP_ADDRESS') 
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') 
SYS_CONTEXT('USERENV','BG_JOB_ID') 
SYS_CONTEXT('USERENV','FG_JOB_ID') 
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE')
SYS_CONTEXT('USERENV','AUTHENTICATION_DATA')  
(2)我们自己创建一个context
语法:
DBMS_SESSION.SET_CONTEXT (
        namespace VARCHAR2,
        attribute VARCHAR2,
        value     VARCHAR2,
        username  VARCHAR2,
        client_id VARCHAR2 );
前三个参数是必须的,后两个非必须,如果不写的话就默认为null。后面两个参数是针对全局的context
使用的,这里不讨论了,请查阅相关资料。一个namespace下的attribute数理论上是没有限制的。
1)创建一个context
CREATE OR REPLACE CONTEXT context_name USING proc_name
2)建立与上下文先关的过程(也就是上面的proc_name)
CREATE OR REPLACE PROCEDURE proc_name
/**
context_name:上面的那个上下文名字
attribute_name:属性的名字,就相当用户userenv中的host,db_name一样
attribute_value:属性的值
**/
AS
  BEGIN
DBMS_SESSION.set_context('context_name', 'attribute_name',attribute_value);
END;
当我们创建好了之后,就可以可以使用了。
(3)context的作用
context的最主要的作用是对信息的一种管理上的方便,这有点类似于OO中的封装思想。我们得到这些信息只要通过SYS_CONTEXT('namespace','attribute')来获得,方便、简洁。
当然,关于context还有很多更深层次的知识,但是如果我们不是那些oracle的底层开发人员,没有必要去过多的深入研究,要把力气用在刀刃上!

相关评论

专题信息
    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;本教程主要是针对oracle应用过程中我们常用的函数进行深入讲解,让大家能够通过代码实例更快、更有效的掌握oracle函数,希望对大家有所帮助。