小弟出学oracle 遇到一点小问题,请教高手们……ALTER SESSION SET CURRENT_SCHEMA = usera;
CREATE OR REPLACE VIEW someview AS SELECT * FROM userb.sometable;
上面的语句在userb.sometable提示错误:表或视图不存在但是执行
ALTER SESSION SET CURRENT_SCHEMA = usera;
SELECT * FROM userb.sometable;
却没有错误

解决方案 »

  1.   

    权限不足导致的。。
    执行下面的语句:
    GRANT SELECT ON userb.sometable TO usera;
      

  2.   

    另外,你的usera和userb要有create any view 的权限。
      

  3.   

    管理员不给权限……
    不是说alter session不会改变当前用户的权限吗?
      

  4.   


    alter session 是不会改变当前用户的权限啊。关键是你当前用户usera没有create view的权限啊!
      

  5.   


    但现在是你的usera没有权限访问userb.sometable啊。
    你单独执行SQL语句的时候用户还是userb
      

  6.   

    连接的用户是另一个用户
    这个用户有查询userb.sometable的权限
    然后在这个用户下执行alter session SET CURRENT_SCHEMA = usera; 
      

  7.   

    是很可能存在当前用户没有在usera下建视图的权限的问题
    但是提示本该是权限不足
    这么会是表或视图不存在
      

  8.   

    你得让usera也要有查询userb.sometable的权限
      

  9.   

    貌似就是usera权限不足的问题
    要把select userb.sometable的权限给usera才行
    看来alter session并不是那么简单啊……
      

  10.   

    给你个例子重现一下,看看是不是和你的一样。。
    16:58:45 scott@TUNGKONG> create user usera identified by a;用户已创建。已用时间:  00: 00: 00.01
    16:59:06 scott@TUNGKONG> create user userb identified by b;用户已创建。已用时间:  00: 00: 00.00
    16:59:12 scott@TUNGKONG> grant dba to usera,userb;授权成功。         ---------------dba权限够大了吧已用时间:  00: 00: 00.03
    16:59:45 usera@TUNGKONG> conn userb/b@tungkong
    已连接。GLOBAL_NAME
    ----------------------------------------------------------------------------------------------------
    userb@TUNGKONG已用时间:  00: 00: 00.00
    16:59:56 userb@TUNGKONG> create table sometable(id int);表已创建。已用时间:  00: 00: 00.00
    17:00:23 userb@TUNGKONG> alter session set current_schema = usera;会话已更改。已用时间:  00: 00: 00.00
    17:00:35 userb@TUNGKONG> show user;
    USER 为 "USERB"
    17:00:39 userb@TUNGKONG> select * from userb.sometable;未选定行已用时间:  00: 00: 00.00
    17:01:58 userb@TUNGKONG> create or replace view someview as select * from userb.sometable;
    create or replace view someview as select * from userb.sometable
                                                           *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    已用时间:  00: 00: 00.00
    17:02:28 userb@TUNGKONG> grant select on userb.sometable to usera;授权成功。已用时间:  00: 00: 00.01
    17:02:35 userb@TUNGKONG> create or replace view someview as select * from userb.sometable;视图已创建。已用时间:  00: 00: 00.01
    17:02:45 userb@TUNGKONG> drop view someview;视图已删除。已用时间:  00: 00: 00.01