当满足某些条件的时候,从ab01_t中取数据

解决方案 »

  1.   

    写这样sql的人应该拉出去枪毙
      

  2.   

    where exists           ------记录存在函数,只要存在满足以下条件的记录反回值就为true
      (select 1 from t_operatorinfo
       where sys_flat=1
       and operator_id=(SELECT client_info from v$session b
                        where b.audsid=to_number(USERENV('SESSIONID'))))
    ---------USERENV函数返回当前用户环境的信息
    or aab001 in
        (select aab001 from t_user_privs
    where operator_id=(SELECT client_info from v$session b
         where b.audsid=to_number(USERENV('SESSIONID'))))
    OR '900' = (SELECT client_info from v$session b
         where b.audsid=to_number(USERENV('SESSIONID')))
    只是语句看起来乱点,思路还是么清晰的
      

  3.   

    不过,在exists 括号里面,最好改成以下形式
    exists           
      (select 1 from t_operatorinfo
       where sys_flat=1
       and operator_id=(SELECT client_info from v$session b
                        where b.audsid=to_number(USERENV('SESSIONID'))))
    or 
    (          ----------新增
    aab001 in
        (select aab001 from t_user_privs
    where operator_id=(SELECT client_info from v$session b
         where b.audsid=to_number(USERENV('SESSIONID'))))
    OR '900' = (SELECT client_info from v$session b
         where b.audsid=to_number(USERENV('SESSIONID')))
    )                     ----------新增
      

  4.   

    各位大侠,其实哥们就是不懂ORACLE下的这几个表都是干什么用的!
    表v$session其中各个字段都是什么意思,具体些????????????  
    还有USERENV('SESSIONID')什么函数,具体些?????????????????????其实不只是你们晕,我看了都快疯了,这就是东软写的东西!谁能具体回答我的问题呀!!!???????????????????????????????????????????????????
      

  5.   

    我也不知道V$SESSION表每个字段的含义,不过据观察
    client_info 字段应该是客户端发出的信息,应该是软件中某项功能实现的写入。
    至于写的是什么,还要看软件的逻辑。
    http://tahiti.oracle.com/,查找sys_context,自行了解相关信息。不知道表结构,没有设计文档,谁能解释语句的含义呢??
      

  6.   

    各位大侠,其实哥们就是不懂ORACLE下的这几个表都是干什么用的!
    表v$session其中各个字段都是什么意思,具体些????????????  
    还有USERENV('SESSIONID')什么函数,具体些?????????????????????其实不只是你们晕,我看了都快疯了,这就是东软写的东西!谁能具体回答我的问题呀!!!???????????????????????????????????????????????????
      

  7.   

    还不算晕,v$**表都是oracle数据字典表,v$session是进程会话表,存了用户的各种进程会话信息,还有 v$sql,v$sesstat,等等,数据库调优的时候经常用到
      

  8.   

    v$session是oracle数据字典的一个视图,具体每个列的含义可以从oracle的文档中获得
    http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2088.htm#sthref3985
      

  9.   

    SELECT client_info from v$session b
         where b.audsid=to_number(USERENV('SESSIONID'))))
    英文解释看不懂,还是直接点谁能告诉我v$session 视图中的audsid字段是什么意思?有什么作用?
    再有就是USERENV('SESSIONID')是什么函数?
    最好具体点?????????????????????
      

  10.   

    这个变态的语句就是检查当前用户的权限, UserEnv('SESSIONID') 是当前用户的会话 ID, audsid 是会话 (session) 视图的要审计的会话 ID.SESSION 视图里还有用户名,地址,客户端信息等。
      

  11.   

    client_info 是用 DBMS_APPLICATION_INFO.SET_CLIENT_INFO 写进去的,应该是这个软件的用户的 ID,如工号,用户名等 (operator_id)。从这个语句可以看出,工号或用户名是 900 的是超级用户,
      

  12.   

    SELECT "AAB001",
           "AAB002",
           "AAB003",
           "AAB004",
           "ZAB001",
           "AAB005",
           "AAE006",
           "CAB002",
           "CAB003",
           "AAE007",
           "AAB006",
           "AAB007",
           "AAB008",
           "AAB009",
           "AAB010",
           "AAB011",
           "AAB012",
           "AAB013",
           "AAB014",
           "AAB015",
           "AAB016",
           "AAB017",
           "AAB018",
           "AAB019",
           "AAB020",
           "AAB021",
           "AAB022",
           "AAB023",
           "AAB024",
           "AAB025",
           "AAB026",
           "AAB027",
           "AAB028",
           "AAB029",
           "AAB030",
           "AAB031",
           "AAB032",
           "AAB033",
           "AAB034",
           "AAB035",
           "AAB036",
           "AAE119",
           "AAB038",
           "AAB039",
           "CKB050",
           "CKB052",
           "CKB053",
           "AAE011",
           "AAE036",
           "CAB001",
           "CKB073",
           "CKB100",
           "AAE013",
           "CAB005",
           "CAB004",
           "CAB008",
           "CAB011",
           "CIC054",
           "CIB011",
           "CKB150",
           "CKB151",
           "AAB901",
           "AAB040",
           "AAB041",
           "AAB042",
           "AAB043",
           "AAB044",
           "AAB045"
      from ab01_t
     where exists
     (select 1
              from t_operatorinfo
             where sys_flat = 1
               and operator_id =
                   (SELECT client_info
                      from v$session b
                     where b.audsid = to_number(USERENV('SESSIONID'))))
        or aab001 in
           (select aab001
              from t_user_privs
             where operator_id =
                   (SELECT client_info
                      from v$session b
                     where b.audsid = to_number(USERENV('SESSIONID'))))
        OR '900' = (SELECT client_info
                      from v$session b
                     where b.audsid = to_number(USERENV('SESSIONID')))---------------------为什么不排下版
      

  13.   

    满足某条件去数据,比较简单的sql
    不过业务逻辑很复杂