创建动态结果的视图

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

比如对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'));


你可能感兴趣的:(创建动态结果的视图)