你可能了解以前的USERENV函数,它返回会话值,如用户会话ID、语言、以及用户是否拥有数据库管理员权限。虽然由于遗留原因,USERENV函数仍在使用,但在 8i中,它已被一个新的函数所替代——SYS_CONTEXT。

SYS_CONTEXT不仅能够返回USERENV数据——它还能返回应用程序定义的数据值。应用程序上下文包括一组可以被SYS_CONTEXT返回的名称(属性)和匹配数据(值)。例如,如果一个人事应用要返回用户的部门号,可以在应用程序中加入下面这行代码:

v_dept := SYS_CONTEXT('HR_CONTEXT', 'DEPT');

9i中推出的After Logon数据库触发器能够方便地初始化应用程序上下文中的属性。用户成功登录Oracle后,触发器启动,在指定的数据包中执行一个过程查询数据,并通过DBMS_SESSION.SET_CONTEXT过程把它放到上下文中。

使用这种方法有以下几个好处:

·它的性能更强。应用程序上下文数据保存在SGA中,访问它可以避免应用程序查询数据时重复读取磁盘。

·它更加。它使用一个与上下文有关的单独PL/SQL代码对象,通常是一个数据包来改变或清除上下文。After Logon触发器正是执行的这个数据包。

·它相当灵活。你可以建立任何你需要的上下文,每个上下文中可包含无限数量的属性-值对。

列表A说明了一个叫做HR_CONTEXT_PKG的PL/SQL数据包。它查询当前用户会话应与哪个部门有关,从而初始化HR_CONTEXT上下文。

然后你可以用下面的CREATE CONTEXT语句建立HR_CONTEXT命名空间,并把它与数据包相关联。

CREATE CONTEXT hr_context

USING HR.HR_CONTEXT_PKG;

下面的代码说明了一个登录触发器,它在用户登录时调用数据包为用户初始化上下文。如果定位正确的部门出现错误,触发器将通过一个EXCEPTION(异常)处理它。否则,没有部门设置的用户将无法登录。

CREATE OR REPLACE TRIGGER DBT_LOGON

AFTER LOGON

ON DATABASE

BEGIN

HR.HR_CONTEXT_PKG.INITIALIZE_HR_CONTEXT;

EXCEPTION

WHEN OTHERS THEN

NULL;

END;

/

这样,现在任何应用程序都能够找出当前用户与哪个部门相关联,而不必进行多次逻辑读取,从一个表中查询它。例如:

SELECT SYS_CONTEXT('HR_CONTEXT','DEPT') FROM DUAL;

这行代码将返回当前用户的部门ID。

Bob Watkins(OCP、MCDBA、MCSE、MCT)是一位有25年经验的计算机专业人士,从事过技术培训师、顾问与数据库管理员等职。

oracle 设置会话的编码,在Oracle中使用登录触发器初始化用户会话相关推荐

  1. SQL Server中的登录触发器概述

    This article gives you an overview of Logon triggers in SQL Server and its usage to control SQL Serv ...

  2. oracle设置开机启动,linux下oracle设置开机自启动实现方法

    一.在Linux下启动Oracle 登录到CentOS,切换到oracle用户权限 # su – oracle 接着输入: $ sqlplus "/as sysdba" 原本的画面 ...

  3. oracle 设置监听和服务,oracle服务端和客户端之间的网络监听设置

    下面为您介绍的是oracle服务端和客户端之间的网络监听设置,如果您在oracle服务端和客户端之间的网络监听设置方面遇到过类似的问题,不妨一看. oracle服务端和客户端之间的网络监听设置 假如我 ...

  4. 如何在Linux中使用Shell脚本终止用户会话?

    本文介绍如何终止所有用户会话.特定的用户回话. 终止所有用户会话 下面的shell脚本将通过获取用户会话的tty值来终止所有用户的活动会话,并使用pkill命令将其终止: [root@localhos ...

  5. oracle设置表字段小写,将oracle中的字段和表名全部修改为小写

    在创建表和表结构的时候,如果想要小写需要在名称上面添加双引号,如果不添加oracle数据库会默认识别为大写 1.将表名和字段名改为大写 批量将表名变为大写 begin for c in (select ...

  6. java连接oracle设置超时,数据库链接在Oracle 11g上超时

    尝试在同一服务器上的两个数据库之间创建数据库链接时,我确实遇到了Oracle数据库11g的问题 . 我正在使用SQL Developer 4.1.3.20,我使用的查询如下所示: CREATE DAT ...

  7. oracle 设置监听和服务,oracle服务端和客户端之间的网络监听如何设置呢?

    racle服务端和客户端之间的网络监听设置 假如我现在有两个数据库kkman和orcl,现在我想在服务端设立两个监听来处理从客户端发过来的连接请求. ------------------------- ...

  8. xp删除管理员账户_在Windows XP中从登录屏幕删除用户帐户

    xp删除管理员账户 So you login to your computer every single day, but there's more than one account to choos ...

  9. oracle终止用户会话

    1.创建两个测试用户进行实验 执行命令如下: create user test1 identified by 1; create user test2 identified by 1; grant d ...

最新文章

  1. Tomcat配置server.xml
  2. Android开发之自定义菊花进度条对话框
  3. tensorflow超参数优化_机器学习模型的超参数优化
  4. 新服务器打包运营级价值几千的H5商城源码
  5. (OS 64)指定的网络名不再可用,winnt_accept: Asynchronous AcceptEx failed.
  6. 披荆斩棘:饿了么业务架构的演进之路
  7. 论通过测试与失败测试
  8. 唯一索引和普通索引的区别
  9. 运动控制——运动曲线分析
  10. iMX8MM linux5.15.32移植
  11. python求圆锥体的表面积公式_圆锥表面积公式推导-圆锥表面积的计算公式
  12. 【读书摘记】《黄金时代》 -王小波
  13. sis最新ip地址2020入口一_【新版教材】2020最新人教版高中化学教材必修一电子课本...
  14. Selenium WebDriver使用IE浏览器
  15. android 黑白屏问题
  16. 钱从哪里来--读书笔记
  17. 房地产特征价格评估的次市场效应模型: 一种概率方法撰写
  18. 【Koltin Flow(二)】Flow操作符之末端操作符
  19. jQuery添加插入元素技巧
  20. 【深度学习】【Python】【Widerface数据集】 转VOC格式,VOC 转YOLOv5格式,YOLOv5训练WiderFace数据集,检查yolo labels对不对

热门文章

  1. 几个移动端直播SDK开源地址
  2. webgl之helloworld
  3. python之helloworld
  4. Rtsp之rtp包解析
  5. vant在cell中加表格_在vant 中使用cell组件 定义图标该图片和位置操作
  6. java 删除文件夹和文件_如何创建无法删除的文件夹?
  7. python写sql语句_python3将变量写入SQL语句的实现方式
  8. 苹果se2_苹果12mini登场后SE2彻底沦为智商检测机?网友:太高明
  9. xp 无法用计算机名访问,WinXP工作组计算机无法访问的解决方法
  10. css鼠标拖拉卡顿_66个值得收藏的CSS开发技巧