Oracle
 sql >> Datenbank >  >> RDS >> Oracle

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

Da dieser Beitrag bei der Suche nach „ORA-00942:table or view does not exist insert“ auf stackoverflow am häufigsten gefunden 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, und der Benutzer, der die Einfügeabfrage ausführt, hat keine Auswahlberechtigung für die Sequenz. Das war mein Problem und es hat unnötig lange gedauert, bis ich es herausgefunden habe.

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

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 lautet „ORA-00942:Tabelle oder Ansicht existiert nicht“, obwohl user2 hat Einfüge- und Auswahlrechte für user1.customer Tabelle und stellt der Tabelle korrekt den Namen des Schemaeigentümers voran. Um das Problem zu vermeiden, müssen Sie der folgenden Sequenz das Select-Privileg erteilen:

grant select on seq_customer_id to user2;