Oracle
 sql >> Database >  >> RDS >> Oracle

Errore SQL:la tabella o la vista ORA-00942 non esiste

Poiché questo post è il primo trovato su StackOverflow durante la ricerca di "ORA-00942:inserto tabella o vista non esiste", voglio menzionare un'altra possibile causa di questo errore (almeno in Oracle 12c):una tabella utilizza una sequenza per impostare un valore predefinito e l'utente che esegue la query di inserimento non dispone del privilegio di selezione sulla sequenza. Questo era il mio problema e mi ci è voluto un tempo inutilmente lungo per capirlo.

Per riprodurre il problema, eseguire il seguente SQL come 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;

Quindi, esegui questa istruzione di inserimento come user2 :

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

Il risultato sarà "ORA-00942:tabella o vista non esiste" anche se user2 ha i privilegi di inserimento e selezione su user1.customer table e antepone correttamente alla tabella il nome del proprietario dello schema. Per evitare il problema, devi concedere il privilegio select sulla sequenza:

grant select on seq_customer_id to user2;