我在windows下安装了ORACLE DB
增加了一个用户ABC,默认表空间为DEF
DEF表空间下有表 users我用ABC连到sqlplus
但是用
select * from users;
报“ORA--00942表或试图不存在”错误!除非使用 
select * from DEF.users;这个问题不知道如何解决,我以前没有碰到过。oracle也是略懂。

解决方案 »

  1.   

    你的概念有问题吧。
    建议用ABC登录,然后建立一个表,语句可参考下面的代码:CREATE TABLE T89
    (
        ID NUMBER(4),
        NAME VARCHAR2(20),
        Age NUMBER(4)
    );INSERT INTO T89 VALUES(1, 'A', 20);
    INSERT INTO T89 VALUES(1, 'A', 20);
    INSERT INTO T89 VALUES(2, 'B', 30);
    INSERT INTO T89 VALUES(2, 'B', 30);
    INSERT INTO T89 VALUES(3, 'C', 40);
    INSERT INTO T89 VALUES(3, 'C', 40);然后,直接执行select * from T89;可以查询到相应的记录。因为T89是ABC这个用记创建的,所以ABC可以直接访问。
    你描述的情况,应该是DEF用户创建的users这个表,然后用ABC去登录做查询,当然要加限定名了。
      

  2.   

    楼主,你确定DEF是表空间,我觉得你ABC和DEF都是用户,然后你用ABC用户登陆查询DEF用户下的肯定就会出现楼主所说的问题!
      

  3.   

    如你所说,我的表是用sys创建的,因此abc可能查询时必须加表空间,虽然sys用户设置了ABC的默认表空间为DEF,查的时候仍然需要加表空间前缀。我用ABC登陆,并创建表,可以直接查询的,这应该是个表的访问权限问题。
      

  4.   

    楼主可以运行:
    select * all_tables where table_name='USERS';
    查看OWNER是不是DEF,而不是ABC。
      

  5.   

    看来我得习惯用ABC去创建表,而不是sys,否则就会有上述的问题。sys能否授权ABC去访问users呢
    我试了下grant 好像不行
      

  6.   

    ABC用户默认的表空间DEF,在用户select时是透明的,可以完全不知道用户默认的表空间都行。你也可再添加多一个用户,指定他的默认表空间为DBF也是行的。
    users是在DBF这个表空间,从你发出的错误码提示信息,应该是users表并不在ABC这个SCHEMA里。你的用户ABC要select users这个表,拥有users这个表的select权限或你的ABC用户拥有SELECT ANY TABLE的系统权限。然后
    SELECT * FROM schema.users;
      

  7.   

    应该是权限问题。你用配额quota查一下