创建动态结果的视图

对于大部分视图而言,返回结果是固定的。但是利用一些变量可以创建动态结果的视图。下面是我常用的创建动态视图的方法:

比如对dba_jobs表权限的控制

create or replace view sys.user_jobs as
select j."JOB",j."LOG_USER",j."PRIV_USER",j."SCHEMA_USER",j."LAST_DATE",j."LAST_SEC",j."THIS_DATE",j."THIS_SEC",j."NEXT_DATE",j."NEXT_SEC",j."TOTAL_TIME",j."BROKEN",j."INTERVAL",j."FAILURES",j."WHAT",j."NLS_ENV",j."MISC_ENV",j."INSTANCE" from dba_jobs j, sys.user$ u where
j.priv_user = u.name
and u.user# = USERENV('SCHEMAID')

      由于使用了USERENV函数获取SCHEMAID信息,使得不同的用户登陆获得的方案ID不同,从而使得不同的用户访问user_jobs视图获得的结果不同。
     select * from user_jobs; --只能查询到当前登录用户的能看到的job
      
      select  USERENV('SCHEMAID') from dual ;   
       比如返回282,那么可以查询sys.user$查看该用户的信息,select * from sys.user$ r where r.user#='282' ;

补充:userenv('sessionid'),可以获得当前登录用户的会话信息,比如进程的SID和SERIAL#

-- 获取本进程的SID和SERIAL#
    select sid, serial#
      into v_sid, v_serial#
      from v$session
     where sid = (select max(sid)
                    from v$session
                   where AUDSID = userenv('sessionid'));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值