`

Oracle的上下文开发--自己定义的Context开发

阅读更多

不 知道有没有用过userevn和sys_context这两个方法。 

userenv在我们查看当前用户的session的字符集的时候是经常用到的。 

比如 
select userenv('language') from dual; 

sys_context的用户和这个userenv类似,是一个保持了和session有关的session级别的上下文。 这个上下文是一个session里的都可以访问到的地方,所以如果我们于需要在这里放入一些session级别的自己的信息,就可以使用这个 sys_context的上下文了。 

那么我们如何把自己的信息放到session里了。Oracle提供了一个DBMS_session的强大的有关session操作的包。文档可见http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10577/d_sessio.htm#i1010942  

我们可以使用里面的set_context的方法 

引用:
DBMS_SESSION.SET_CONTEXT ( 
namespace VARCHAR2, 
attribute VARCHAR2, 
value VARCHAR2, 
username VARCHAR2, 
client_id VARCHAR2 );

这里的几个参数的含义 
namespace 这个context的命名空间 
attribute 属性值,即为key值 
value 值 
username 用户名 默认null 
client_id 指定的clientid 默认null这里1-3函数是一定要的,后面两个是可选值, 

我们赶快到sqlplus试试把

引用:
SQL> exec dbms_session.set_context('', 'name', 'liuyong'); 
BEGIN dbms_session.set_context('', 'name', 'liuyong'); END; 


ERROR at line 1: 
ORA-28106: input value for argument #1 is not valid 
ORA-06512: at "SYS.DBMS_SESSION", line 78 
ORA-06512: at line 1



这里出错了。主要是我们的用法不对,在Oracle的文档里已经描述了,这里的context只能是建立create来使用,那么我们应该如何来用了 

首先建立package来包装这个context 
create or replace package my_context_p as 
procedure put(key varchar2, value varchar2); 
end; 

create or replace package body my_context_p as 
procedure put(key varchar2, value varchar2) as 
begin 
dbms_session.set_context('my_context ',key,value); 
end; 
end; 


然后建立context 
create or replace context my_context  using my_context_p ACCESSED GLOBALLY; 
注意这里的context的名字要和package里set_context的时候一样。 否则后面调用会告诉你ORA-01031: insufficient privileges。 

调用 
SQL> exec my_context_p.put('test', 'inthirties'); 

检查 
SQL> exec dbms_output.put_line(sys_context('my_context','test')); 
inthirties 

这样我们就实现了我们需要的功功能呀。

分享到:
评论

相关推荐

    Oracle自定义聚合函数-分析函数

    1. ODCIAggregateInitialize 函数:用于初始化聚合函数环境,创建聚合函数的上下文环境。 2. ODCIAggregateIterate 函数:这是最主要的步骤,这个函数定义我们的聚合函数具体做什么操作,self 为当前聚合函数的指针...

    WebLogic创建根上下文

    2. **定义`context-root`**:在`weblogic.xml`文件中添加`<context-root>`元素,并设置其值为你希望的上下文根名称。 3. **部署应用程序**:将包含`weblogic.xml`文件的Web应用程序部署到WebLogic服务器上。 4. **...

    oracle 报表开发中用PCK直接生成xml数据文件

    使用`dbms_xmlgen.newContext(v_source)`创建一个XML生成的上下文对象。这个上下文对象将用于从游标数据生成XML。 4. **生成XML CLOB**: 调用`dbms_xmlgen.getXML(ctx)`从上下文对象中获取XML数据,将其存储到...

    Oracle9.2_SYS_CONTEXT函数的用法

    在Oracle数据库系统中,`SYS_CONTEXT`函数是一个非常实用的功能,它允许用户从不同的上下文中检索信息。在Oracle9.2版本中,这个函数提供了一种灵活的方式来访问与当前会话或系统环境相关的各种属性。下面,我们将...

    用ProC开发多线程应用程序

    2. **多线程使用互相独立的运行时上下文**:每个线程都有自己的运行时上下文,无需使用互斥锁。这种方式简化了并发控制,但可能需要更多的资源。 Pro*C为多线程应用程序提供了命令行选项和内嵌SQL语句来支持运行时...

    oracle标准语法速查表

    - **定义**:安全参数、部门树和会话上下文信息。 - **用途**:管理安全性及会话状态。 #### 三、实例参数 此外,还列出了一些重要的实例参数: - `instance_name`:实例名称。 - `service_names`:服务名称列表。...

    SSH连接Oracle数据库.txt

    这段配置指定了Spring配置文件的位置,并启用了Spring的上下文加载监听器。此外,还配置了一个Struts过滤器,用于处理Struts框架相关的请求。 综上所述,通过以上配置,SSH框架可以成功连接并操作Oracle数据库。...

    在Oracle中使用登录触发器初始化用户会话

    在Oracle数据库中,初始化用户会话常常涉及到对特定信息的高效、安全且灵活的管理。...在开发和维护Oracle数据库应用程序时,充分利用After Logon触发器和应用程序上下文,可以有效地提升系统的性能和用户体验。

    MyEclipse链接oracle连接池的创建

    这段代码首先通过`InitialContext`创建了一个JNDI上下文,然后使用`lookup`方法根据之前定义的JNDI名称查找数据源。最后,通过数据源的`getConnection`方法获取数据库连接。 总结来说,创建MyEclipse连接Oracle的...

    Linux 5.5 +oracle 11gR2 sqlplus error

    - 使用 `semanage` 工具来创建或修改安全上下文(security context),以便 SQL*Plus 和其他 Oracle 应用程序能够正常工作。 - 例如,可以通过 `semanage fcontext -a -t oracle_home_t "/u01/app/oracle/product/...

    OracleEBS中的弹性域讲解与设置

    通过理解和运用Oracle EBS中的弹性域,特别是其上下文字段的功能,企业能够更加灵活地管理复杂的数据结构,从而更好地适应不断变化的业务需求。此外,自定义上下文列的引入进一步增强了弹性域的灵活性,使得根据用户...

    ssh开发所需基本jar包

    - `spring-context.jar`: 提供了上下文环境,包括依赖注入和AOP支持。 - `spring-web.jar`: 用于处理Web相关的功能,如Servlet监听器和过滤器。 - `spring-webmvc.jar`: 提供了Spring的MVC框架,与Struts2类似但...

    Tomcat下对Oracle数据库连接池数据源的配置

    除了上述手动配置外,你还可以通过修改`context.xml`文件(位于Tomcat的`conf/Catalina/localhost`目录下,对应于你的应用上下文)来配置数据源。在`<Context>`标签内,添加`<Resource>`标签,定义数据源的相关属性...

    Oracle XML核心技术

    虽然题目要求主要集中在Oracle XML核心技术上,但为了提供完整的上下文,这里也将简要介绍ASP内嵌对象的基本概念及其使用。 ##### 1. ASP内嵌对象概述 ASP(Active Server Pages)是一种服务器端脚本环境,可以在服务器...

    oracle学习资料

    - **上下文(Context)**:允许逻辑模式通过不同上下文连接多个物理模式,用于管理数据库连接信息,确保物理模式的可移植性。 3. **ODI的管理工具**: - **Topology Manager**:用于管理ODI的物理和逻辑结构,...

    Pretius-APEX-Context-Menu

    Pretius APEX上下文菜单是动态操作插件,基于定义的APEX列表实现APEX弹出菜单。 该插件可以附加到任何HTML元素,并根据授权方案结果呈现条目。 可以通过覆盖行为,动态添加子菜单和添加新条目来扩展菜单条目。 预习 ...

    MySQL-Events-CN[定义].pdf

    在本文中,我们将详细介绍 MySQL 事件的定义、语法、示例、权限设定、上下文环境设定、元数据、事件计划、其他 DBMS 的情况以及实践用例。 定义和语法 CREATE EVENT 语句用于创建一个新的事件,语法如下: CREATE...

    oracle常用问题解答

    **解答**: `SYS_CONTEXT`函数允许访问Oracle环境中的上下文信息,例如会话变量、服务器参数等。它常用于获取当前会话的信息。 - **示例**: 获取当前用户的名称: ```sql SELECT SYS_CONTEXT('USERENV','CURRENT_...

Global site tag (gtag.js) - Google Analytics