Oracle创建上下文 SYS_CONTEXT

1. 系统默认的一些参数

set heading off
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;
-- 另一种展示方式
set serveroutput on
exec dbms_output.put_line(sys_context('USERENV','CURRENT_USER'));

2. 自定义上下文属性

create user king identified by king;
grant dba to king;
connect king/king
create table emp as select * from scott.emp;
create context emp_user using current_emp;

-- 创建包current_emp
CREATE OR REPLACE PACKAGE current_emp IS
PROCEDURE set_emp_info;
END;
/ CREATE OR REPLACE PACKAGE BODY current_emp IS
PROCEDURE set_emp_info IS
  v_sal     emp.sal%TYPE;
  v_job     emp.JOB%TYPE;
  v_hiredate emp.HIREDATE%TYPE;
 BEGIN
   SELECT sal, JOB, HIREDATE
     INTO v_sal, v_job, v_hiredate
     FROM emp
    WHERE ename = SYS_CONTEXT('USERENV', 'SESSION_USER');
 
  DBMS_SESSION.SET_CONTEXT('emp_user', 'sal', v_sal);
  DBMS_SESSION.SET_CONTEXT('emp_user', 'job', v_job);
  DBMS_SESSION.SET_CONTEXT('emp_user', 'hiredate', v_hiredate);
  DBMS_SESSION.SET_CONTEXT('emp_user', 'ename', SYS_CONTEXT('USERENV', 'SESSION_USER'));
EXCEPTION
  WHEN NO_DATA_FOUND THEN
     NULL;
END;
END;
/
​ -- 创建触发器
CREATE or REPLACE TRIGGER emp_logon
AFTER LOGON ON DATABASE
BEGIN
current_emp.set_emp_info;
END;
/

-- 验证
exit
sqlplus king/king
SET SERVEROUTPUT ON
EXEC dbms_output.put_line(sys_context('emp_user', 'SAL'));
EXEC dbms_output.put_line(sys_context('emp_user', 'job'));
EXEC dbms_output.put_line(sys_context('emp_user', 'hiredate'));
SELECT sys_context('emp_user', 'SAL') FROM DUAL;

--列出当前session 的所有上下文属性
sqlplus king/king

SET ECHO OFF
SET SERVEROUTPUT ON
DECLARE
list dbms_session.AppCtxTabTyp;
cnt number;
BEGIN
dbms_session.list_context(list, cnt);
IF cnt = 0 THEN
  dbms_output.put_line('No contexts active.');
ELSE
  FOR i IN 1 .. cnt LOOP
    dbms_output.put_line(list(i).namespace || ' ' || list(i).attribute ||
                           ' = ' || list(i).value);
  END LOOP;
END IF;
END;
/

--查询
SELECT *
FROM dba_context
WHERE namespace = 'EMP_USER';

参考

【诗檀学院】ORACLE 11g OCM考试学习材料-手动实操课程

Oracle创建上下文 SYS_CONTEXT的更多相关文章

  1. 利用Oracle创建表空间和用户

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217152.html 第一步,创建表空间 以SYS/sys账户和SYSDBA身份登录 ...

  2. 利用Oracle创建数据库

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217151.html 数据库的创建 打开"所有程序"-" ...

  3. Oracle创建数据库

    Oracle创建数据库有三种方式:一.使用DBCA(Database Configuration Assistant 数据库配置助手):二.使用 create database指令:三.在安装数据库软 ...

  4. oracle创建表之前判断表是否存在,如果存在则删除已有表

    Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id int NOT NULL ...

  5. oracle创建数据库和用户

    以前开发的时候用得比较多的是mysql和sql server,oracle用的比较少,用起来比较生疏,mysql和sql server用起来比较类似,就oracle的使用方式和他们不同,oracle在 ...

  6. ORACLE创建表空间、创建用户、更改用户默认表空间以及授权、查看权限

    Oracle创建用户.表空间.导入导出....命令 //创建临时表空间 create temporary tablespace ext_temptempfile 'D:\oracle\product\ ...

  7. Oracle创建表空间和表

    创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...

  8. Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    引用自 :http://www.2cto.com/database/201307/224836.html   Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...

  9. Oracle创建用户并给用户授权查询指定表或视图的权限

    MSV31账户登录数据库进行如下操作: CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND  DEFAULT TABLESPACE "TBS_DN ...

随机推荐

  1. matlab学习——02整数规划(蒙特卡洛法,指派问题,混合整数规划)

    02整数规划 蒙特卡洛法(随机取样法) 编写文件mengte.m,目标函数f和约束向量g function[f,g]=mengte(x); f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4 ...

  2. thinkphp3.2.2 没有定义数据库配置

    出现这个问题,温习下tp配置多个数据库 <?php return array( //默认数据库 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => ...

  3. iOS通知注意点

    之前以为控制器发送通知,只有你满足:1>注册接收通知:2>进入本页面才能接收到值. 今天朋友问了一个问题: 他的逻辑如下: 退出登录发送通知,需要好几个界面会收到通知,然后这几个界面进行网 ...

  4. Node.js使用supervisor

    对代码的修改,每次都要重新启动服务器,使用supervisor它会监视你对代码的改动,并自动重启 Node.js. 1> npm安装: npm install -g supervisor 2&g ...

  5. Swift学习 (三)

    3.函数: 在Swift中函数的定义基本与OC一样. 主要区别为: 通过func关键词定义函数 返回值在->关键词后标注 各举一个类方法与实例方法例子. 1 2 + (UIColor*)blac ...

  6. Java如何获取ResultSet结果中的每一列的数据类型

    示例代码片段: ResultSet resultSet = statement.executeQuery(sql); ResultSetMetaData metaData = resultSet.ge ...

  7. linux下的进程间通信概述

    管道(PIPE) FIFO(有名管道) XSI消息队列 XSI信号量 XSI共享内存 POSIX信号量 域套接字(Domain Socket) 信号(Signal) 互斥量(Mutex) 其中信号(s ...

  8. 【ARM-Linux开发】TI 关于Gstreamer使用的几个参考

    http://processors.wiki.ti.com/index.php/Example_GStreamer_Pipelines#H.264_RTP_Streaming http://proce ...

  9. Go之gob包的使用

    gob包("encoding/gob")管理gob流——在encoder(编码器,也就是发送器)和decoder(解码器,也就是接受器)之间交换的字节流数据(gob 就是 go b ...

  10. 迷惑性很强的crontab

      提到定时任务,我们通常会想起linux的crontab,可以说服务器端大部分定时任务都是由它完成的.这东西固然耗用,但是坑也不少.   这不,昨天我在部署一个备份任务的时候,就不幸踩坑了.差点酿成 ...