2013-04-21 13 views
10

Ich benutze SQL-Entwickler und ich stellte eine Verbindung zu meiner Datenbank mit dem Systembenutzer, nachdem ich einen Benutzer erstellt und eine weitere Verbindung mit diesem Benutzer mit allen erforderlichen Berechtigungen.SQL-Fehler: ORA-00942 Tabelle oder Sicht existiert nicht

Aber wenn ich versuche folgendes zu gehen ich den SQL-Fehler

ORA-00942 table or view does not exist.:


INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson') 

Antwort

9

entweder der Benutzer keine Berechtigungen benötigt, um die Tabelle zu sehen, wird die Tabelle nicht vorhanden ist oder Sie führen die Abfrage im falschen Schema

ist die Tabelle vorhanden?

select owner, 
     object_name 
from dba_objects 
where object_name = any ('CUSTOMER','customer'); 

Welche Privilegien haben Sie gewährt?

grant select, insert on customer to user; 

führen Sie die Abfrage gegen den Besitzer von der ersten Abfrage aus?

+4

'dba_objects' ist für einen normalen Benutzer nicht zugänglich. Sie sollten stattdessen 'all_objects' verwenden. –

+0

Vielen Dank für Ihr Interesse, habe ich die erste Abfrage ausgeführt, um den Besitzer der 'Kunden' Tabelle zu sehen, ich habe das Ergebnis "0 Zeilen ausgewählt". das bedeutet, dass der Benutzer, den ich erstellt habe, keine Privilegien benötigt, denke ich? – user2304042

6

Sie können nicht direkt auf die Tabelle mit dem Namen 'Kunde' zugreifen. Entweder sollte es 'user1.customer' sein oder ein Synonym 'customer' für user2 erstellt werden, das auf 'user1.customer' verweist. hoffe, das hilft ..

1

hier eine Antwort: http://www.dba-oracle.com/concepts/synonyms.htm

Ein Oracle-Synonym im Grunde können Sie einen Zeiger auf ein Objekt erstellen, die irgendwo anders existiert. Sie benötigen Oracle-Synonyme, denn wenn Sie bei Oracle angemeldet sind, sucht es nach allen Objekten, die Sie in Ihrem Schema (Konto) abfragen. Wenn sie nicht da sind, erhalten Sie einen Fehler, der Ihnen sagt, dass sie nicht existieren.

10

Da es sich bei diesem Beitrag um den obersten Eintrag in stackoverflow bei der Suche nach "ORA-00942: Tabelle oder Ansicht existiert nicht einfügen" handelt, möchte ich eine andere mögliche Ursache für diesen Fehler erwähnen (zumindest in Oracle 12c): a Tabelle verwendet eine Sequenz, um einen Standardwert festzulegen, und der Benutzer, der die Einfügeabfrage ausführt, hat keine Auswahlberechtigung für die Sequenz. Das war mein Problem und ich brauchte unnötig lange, um es herauszufinden.

das Problem zu reproduzieren, führen Sie die folgende SQL als user1:

create sequence seq_customer_id; 

create table customer (
c_id number(10) default seq_customer_id.nextval primary key, 
name varchar(100) not null, 
surname varchar(100) not null 
); 

grant select, insert, update, delete on customer to user2; 

Dann führen Sie diese Insert-Anweisung als user2:

insert into user1.customer (name,surname) values ('michael','jackson'); 

Das Ergebnis wird „ORA-00942: Tabelle oder Die Ansicht existiert nicht, obwohl user2 für die Tabelle user1.customer Berechtigungen einfügen und auswählen und der Tabelle den Namen des Schemabesitzers korrekt voranstellt. Um das Problem zu vermeiden, müssen Sie eine Auswahlberechtigung für die Sequenz erteilen:

grant select on seq_customer_id to user2; 
+0

Ich bin gerade durch dasselbe Szenario gegangen. Sehr irritierend, dass Sie 00942 bekommen, wenn das eigentliche Problem ein Sequenz-Berechtigungsproblem ist. – SeattleDucati

Verwandte Themen