web-dev-qa-db-ja.com

テーブルが存在しているときに「ORA-00942:テーブルまたはビューが存在しません」を取得する

私は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.

次にexit;でsqlplusを終了し、新しいユーザーとして接続してテストしました。私は正常にデータベースにログインしました:

$ 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

ここで何が欠けていますか?

10
Seyed Mohammad

SYSスキーマにテーブルを作成しました(これはneverを使用する必要があります。実際には、never)。

teacher1としてログインすると、すべてのステートメントがそのスキーマ内のオブジェクトを探します。ただし、実際の名前はTEACHER1.INSTRUCTORSであるため、SYS.INSTRUCTORSテーブルはありません(SYSスキーマにオブジェクトを作成するというのがbadの考え方だと思いますか?)。

そのテーブルにアクセスするには、select * from sys.instructorsを実行する必要があります。テーブル名の前にスキーマを付けたくない場合は、teacher1スキーマにシノニムを作成します。

create synonym teacher1.instructors for sys.instructors;

次に、teacher1は、完全修飾なしでSYSスキーマからテーブルにアクセスできます。

繰り返しますが、DBA以外のものについては、SYSまたはSYSTEMアカウントの使用を停止してください。通常のアカウントを使用してください。

19