oracle 全局上下文,oracle context(上下文)

context在计算机领域翻译为上下文

context的信息也就是当前会话中的环境变量,如:登录的session_id,用户名,语言等信息

查看context中的属性信息。

oracle默认的为我们创建了一个context叫userenv(user environment)

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')

例子:

产看当前session的字符集信息

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.AL32UTF8

创建自定义oracle context

Application Context是内存中的一组name-value对,application context从属于某个命名空间(namespace);

用户只能通过一个自定义封装包或存储过程中调用dbms_session.set_context来设置application context的值;

用户使用sys_context(,)来获取某个application context的值。

语法:

DBMS_SESSION.SET_CONTEXT

( namespaceVARCHAR2, attribute VARCHAR2, value VARCHAR2, username VARCHAR2, client_idVARCHAR2 );

namespacecontext的命名空间--必要参数

attribute属性值--必要参数

value值--必要参数

username用户名(默认为Null)--可选参数

client_id指定的clientid --可选参数

Application context分为三种

dabase session-based application context--local application context

global application context--global application context

client session-based application context--通过OCI管理使用的,存储在客户端内存的context

Local applicationcontext

context存储在UGA中,本地context是session/server process级别的,当会话/serverprocess终止时,context也会结束

Global application context

context存储在SGA中,SGA消失,全局context也就会结束;它常常用于跨会话,应用于与会话无关的场景

例子:

1.创建一个context

SQL> create context context_only using pkg_only;

Context created.

2.建立与上下文先关的包来封装(也就是上面的pkg_name)

SQL> create package pkg_only

2  as

3  procedure put(key varchar2,value varchar2);

4  end;

5  /

Package created.

SQL> create package body pkg_only

2  as

3  procedure put(key varchar2,value varchar2)

4  as

5  begin

6  dbms_session.set_context('context_only',key,value);

7  end;

8  end;

9  /

Package body created.

3.设置存储过程输入输出

SQL> exec pkg_only.put('name','only');

PL/SQL procedure successfully completed.

4.调用context

SQL> select sys_context('context_only','name') from dual;

SYS_CONTEXT('CONTEXT_ONLY','NAME')

--------------------------------------------------------------------------------

only

dbms_session.set_context有两个默认值为NULL的参数:username、client_id

username= null , client_id=null。所有用户都能访问。

username= null, client_id=。只要session 的client_id =,而不管username,都能访问。

username= , client_id=null。只要session使用指定的oracle schema登陆,不管client_id,都能访问。

username= , client_id=. 常用于statless web session ,如http。

username= , client_id= . 该username将用于数据库连接池的owner。

整理自网络

本文出自 “丶Only” 博客,谢绝转载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值