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;