Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro SQL:a tabela ou visualização ORA-00942 não existe


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;