it-swarm.com.de

SQL-Fehler: ORA-00942-Tabelle oder -Ansicht existiert nicht

Ich verwende SQL Developer und habe mit dem Systembenutzer eine Verbindung zu meiner Datenbank hergestellt, nachdem ich einen Benutzer erstellt und eine andere Verbindung mit diesem Benutzer mit allen erforderlichen Berechtigungen hergestellt habe.

Aber wenn ich versuche zu folgen, erhalte ich den SQL-Fehler

ORA-00942 Tabelle oder Sicht existiert nicht .:


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

Da dieser Beitrag der erste ist, der im Stapelüberlauf gefunden wird, wenn nach "ORA-00942: Tabelle oder Ansicht existiert nicht einfügen" gesucht wird, möchte ich eine weitere mögliche Ursache für diesen Fehler erwähnen (zumindest in Oracle 12c): Eine Tabelle verwendet eine Sequenz Um einen Standardwert festzulegen, hat der Benutzer, der die Einfügeabfrage ausführt, keine Auswahlberechtigung für die Sequenz. Dies war mein Problem und ich brauchte unnötig viel Zeit, um es herauszufinden.

Führen Sie das folgende SQL als user1 Aus, um das Problem zu reproduzieren:

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;

Führen Sie dann diese Einfügeanweisung als user2 Aus:

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

Das Ergebnis ist "ORA-00942: Tabelle oder Ansicht existiert nicht", obwohl user2 Über Einfüge- und Auswahlrechte für die Tabelle user1.customer Verfügt und der Tabelle den Namen des Schemabesitzers korrekt voranstellt. Um das Problem zu vermeiden, müssen Sie das Auswahlrecht für die Sequenz erteilen:

grant select on seq_customer_id to user2;
29
jake stayman

entweder verfügt der Benutzer nicht über die zum Anzeigen der Tabelle erforderlichen Berechtigungen, die Tabelle ist nicht vorhanden, oder Sie führen die Abfrage im falschen Schema aus

existiert der tisch

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 für den Besitzer aus der ersten Abfrage aus?

11
rs'

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 erstellen, das auf 'user1.customer' verweist. hoffe das hilft..

7
user2529066

Hier ist eine Antwort: http://www.dba-Oracle.com/concepts/synonyms.htm

Mit einem Oracle-Synonym können Sie grundsätzlich einen Zeiger auf ein Objekt erstellen, das an einer anderen Stelle vorhanden ist. Sie benötigen Oracle-Synonyme, da bei der Anmeldung bei Oracle nach allen Objekten gesucht wird, die Sie in Ihrem Schema (Konto) abfragen. Wenn sie nicht vorhanden sind, erhalten Sie eine Fehlermeldung, dass sie nicht vorhanden sind.

1
TechMaze

Groß- und Kleinschreibung beachten Tabellen (Tabellennamen, die mit doppelten Anführungszeichen erstellt wurden) können denselben Fehler auslösen. Siehe diese Antwort für weitere Informationen.

Wickeln Sie die Tabelle einfach in doppelte Anführungszeichen:

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