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;
'dba_objects' ist für einen normalen Benutzer nicht zugänglich. Sie sollten stattdessen 'all_objects' verwenden. –
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