Como este post é o principal encontrado no stackoverflow ao pesquisar "ORA-00942:table or view does not exist insert", quero mencionar outra possível causa desse erro (pelo menos no Oracle 12c):uma tabela usa uma sequência para definir um valor padrão e o usuário que executa a consulta de inserção não tem privilégio de seleção na sequência. Este era o meu problema e levei um tempo desnecessariamente longo para descobrir isso.
Para reproduzir o problema, execute o seguinte SQL como
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;
Em seguida, execute esta instrução de inserção como
user2
:insert into user1.customer (name,surname) values ('michael','jackson');
O resultado será "ORA-00942:tabela ou visualização não existe" mesmo que
user2
tem privilégios de inserção e seleção em user1.customer
table e está prefixando corretamente a tabela com o nome do proprietário do esquema. Para evitar o problema, você deve conceder o privilégio de seleção na sequência:grant select on seq_customer_id to user2;