oracle创建上下文语句,Oracle创建上下文 SYS_CONTEXT

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考试学习材料-手动实操课程

标签:emp,SYS,SESSION,user,CONTEXT,Oracle,USERENV

来源: https://www.cnblogs.com/plluoye/p/11098831.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值