Poiché questo post è quello più in alto su stackoverflow durante la ricerca di "ORA-00942: tabella o vista non esiste inserimento", voglio menzionare un'altra possibile causa di questo errore (almeno in Oracle 12c): a tabella utilizza una sequenza per impostare un valore predefinito e l'utente che esegue la query di inserimento non ha privilegi 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;
Poi, eseguire questa istruzione di inserimento come user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Il risultato sarà "ORA-00942: tavolo o la vista non esiste "anche se user2
ha i privilegi di inserimento e selezione nella tabella user1.customer
e ha prefisso correttamente la tabella con il nome del proprietario dello schema. Per evitare il problema, è necessario concedere il privilegio di selezione sulla sequenza:
grant select on seq_customer_id to user2;
fonte
2016-03-22 21:19:34
'dba_objects' non è accessibile per un utente normale. Dovresti invece usare 'all_objects'. –
Grazie mille per il vostro interesse, Ive ha eseguito la prima query per vedere il proprietario della tabella 'cliente', ho ottenuto il risultato "0 righe selezionate". quindi significa che l'utente che ho creato non ha i privilegi necessari, immagino? – user2304042