sql >> Base de Datos >  >> RDS >> Oracle

Error de SQL:la tabla o vista ORA-00942 no existe

Debido a que esta publicación es la principal que se encuentra en stackoverflow al buscar "ORA-00942:la tabla o la vista no existe insertada", quiero mencionar otra posible causa de este error (al menos en Oracle 12c):una tabla usa una secuencia para establecer un valor predeterminado y el usuario que ejecuta la consulta de inserción no tiene privilegios de selección en la secuencia. Este era mi problema y me llevó un tiempo innecesariamente largo resolverlo.

Para reproducir el problema, ejecute el siguiente 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;

Luego, ejecute esta declaración de inserción como user2 :

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

El resultado será "ORA-00942:la tabla o vista no existe" aunque user2 tiene privilegios de inserción y selección en user1.customer table y está prefijando correctamente la tabla con el nombre del propietario del esquema. Para evitar el problema, debe otorgar privilegios de selección en la secuencia:

grant select on seq_customer_id to user2;