我想实现一个管理授权给用户的实验,点击客户端的第三方软件进行授权并把授权用户名写入表dbausers,操作完点离开第三方软件会自动从表里删除掉刚授权好的用户,那现在有个问题就是如果客户端突然断电掉,造成无法收回用户权限,那我就要在服务器端写个脚本,把当前对话v$session的用户跟我建立的dbausers里插入的用户名进行比对,如果存在就把它筛选出来.我现在出现的问题是不知道怎么把v$session里的username跟dbausers里的username取个交集....新建立一张表:
create table dbausers(username varchar2(20);那我现在要怎么样查看v$session里的username跟dbauser的username,然后取出他们的交集.测试1:
select * from v$session a left join system.dbausers b
on a.username = b.username;测试2:
select username from v$session
where username in (select username from dbausers);新手上路,请朋友们多多帮忙...谢谢

解决方案 »

  1.   

    交集就是用内连接inner join 
    select b.* 
    from v$session a inner join system.dbausers b
    on a.username = b.username;
    或者
    select b.* 
    from v$session a ,
    system.dbausers b
    where  a.username = b.username;
      

  2.   


    测试你给我的第一个提示from v$session a inner join system.dbausers b
                     *
    ERROR 位于第 2 行:
    ORA-00933: SQL 命令未正确结束测试第二个提示的是未选定行
      

  3.   

    你把两个表的字段取出来后,
    用一个相同的别名,就可以用intersect取交集了
      

  4.   

    oracle 8i是不是不支持这类呀
      

  5.   

    测试:
    select p.username from v$session p intersect select p.username from system.dbausers p;结果:
    未选定行
    ..不知道跟版本是不是有关系...
      

  6.   

    我用你的sql没问题啊
    SQL> create table dbausers as select distinct username from dba_users;Table created.SQL> select b.*
      2  from v$session a,
      3  dbausers b
      4  where  a.username = b.username; USERNAME
    ------------------------------
    SCOTTSQL>