表格存在时获取“ ORA-00942:表格或视图不存在”


10

我是Oracle数据库的新手。我已经安装Oracle Database 11g R2Oracle Linux 6。我已经使用以下方法成功创建了一个新数据库dbca并连接到该数据库:

$ sqlplus "/ as sysdba"

我成功创建了一个表,并插入了一些数据并执行了一些选择:

SQL> CREATE TABLE Instructors (
         tid    NUMBER(7) PRIMARY KEY,
         fname  VARCHAR2(32),
         lname  VARCHAR2(32),
         tel    NUMBER(16),
         adrs   VARCHAR2(128) );

Table created.

SQL> INSERT INTO Instructors (tid, fname, lname, tel, adrs)
     VALUES (8431001, 'John', 'Smith', 654321, 'London');

1 row created.

SQL> SELECT count(*) FROM Instructors;

  COUNT(*)
----------
        1

然后,我创建了一个具有CONNECT特权的新用户:

SQL> CREATE USER teacher1 IDENTIFIED BY pass1;

User created.

SQL> GRANT CONNECT TO teacher1;

Grant succeeded.

然后,我创建了一个具有适当对象权限的新角色:

SQL> CREATE ROLE instructor;

Role created.

SQL> GRANT SELECT, UPDATE ON Instructors TO instructor;

Grant succeeded.

并授予用户角色:

SQL> GRANT instructor TO teacher1;

Grant succeeded.

接下来,我退出sqlplus exit;并以新用户身份进行连接以对其进行测试。我使用以下命令成功登录到数据库:

$ sqlplus teacher1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 03:20:50 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Enter password: *****

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

但是当我尝试从表中选择时,它说:

SQL> SELECT * FROM Instructors;
SELECT * FROM Instructors
              *
ERROR at line 1:
ORA-00942: table or view does not exist

我在这里想念的是什么?

Answers:


19

您在创建表SYS的模式(你应该永远,永远做。真的,从来没有)。

当您以teacher1任何语句登录时,将在该架构中查找对象。但是没有TEACHER1.INSTRUCTORS表,因为真实名称是SYS.INSTRUCTORS(我是否提到在SYS模式中创建对象是一个主意?)。

您需要运行select * from sys.instructors以访问该表。如果您不想在表名之前添加模式,请在模式中创建一个同义词teacher1

create synonym teacher1.instructors for sys.instructors;

然后teacher1可以从SYS架构访问表而无需完全限定它。

再次:停止将SYS或SYSTEM帐户用于不是DBA的东西。为此,请使用普通帐户。


谢谢。我必须创建多个用户可以访问它的表。根据您的解释,我推断应该创建一个dbadmin具有DBA特权的新用户,并使用该DBA用户创建所有表。然后,所有其他用户应从DBADMIN架构访问表...对吗?
赛义德·穆罕默德

5
@SeyedMohammad:无需创建DBA用户。创建一个普通用户并在该架构中创建表。然后将那些表上的select授予其他用户。除DBA工作外,将DBA角色用于其他工作不是一个好主意。
a_horse_with_no_name 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.