oracle 的疑惑 ?设置用户下的表问题!
我新建了一个数据 db在数据下建立一个表 空间 data_data
             临时表空间 data_temp然后又建了好几张表:tb_one ,tb_two 等等
然后我又在建了一个用户  用户名:test  密码:test 。-------------------
<add key="OracleConn" value="server=127.0.0.1:1521;user id=test;password=test;data source=db;"></add>
数据库连接应该没有问题
-------------------
然而,就在我写查询语句“select * from tb_one”
竟然报出“表或视图不存在”的问题。
-------------------
之后我又这么写 “select * from test.tb_one”
却是可以的。难道要我在写sql语句前 每一张表的前面加上“test.”么?(那样也太累了)
又或者我要把表都放在默认用户system下?
-------------------
大家帮出出注意。

解决方案 »

  1.   

    不用的登录名对应的是不同的schema 所以 test 登录后默认的schema 是 test, 
    select * from tb_one 也就等同于 select * from test.tb_one改成 select * from db.tb_one 试一下。当然你要先做好授权给 test
      

  2.   

    SQL> show user
    USER is "SCOTT"
    SQL> drop table t1;Table dropped.SQL> create table t1(id number); --在SCOTT SCHEMA下创建一个表T1Table created.SQL> insert into t1 values(1);1 row created.SQL> commit;Commit complete.SQL> select * from t1; --查询时T1表名前不加前缀SCOTT.是可以的 因为在当前自己的SCHEMA下        ID
    ----------
             1SQL> conn / as sysdba 
    Connected.
    SQL> show user
    USER is "SYS"
    SQL> select * from t1; --在SYS SCHEMA下进行查询就不行了 必须加上SCOTT.
    select * from t1
                  *
    ERROR at line 1:
    ORA-00942: table or view does not exist
    SQL> select * from scott.t1;        ID
    ----------
             1
      

  3.   

    首先要确认自己当前登录的执行查询语句的用户是不是创建表的用户
    如果不是 必须要加上创建表用户SCHEMA前缀
    这样加其实也没什么不好 代码更易懂一些 不过如果你要在很多个地方使用查询语句 嫌加前缀麻烦
    给两种解决方法参考1
    创建同义词
    这个方法我就不说了 不会的话网上一搜一大堆
    2
    更改当前会话的SCHEMA
    方法参见
    http://blog.csdn.net/wh62592855/archive/2009/11/13/4805919.aspx
      

  4.   

    然而,就在我写查询语句“select * from tb_one” 
    竟然报出“表或视图不存在”的问题。
    该问题存在的原因有:
    1.当前登录用户不是该表的创建者。
    2.该表确实不存在,不过你这个情况排除了给可能性。
    楼主这样的情况建同义词没有多大必要,因为同义词是隐藏一些对其他用户不可见的对象。
    然而楼主的这些表都是test他自己建的,没有必要再对test创建的对象进行隐藏了。这样只会给数据库的维护带来麻烦。
      

  5.   

    你用test用户登录就不需要test了