Eftersom det här inlägget är det bästa som hittas på stackoverflow när man söker efter "ORA-00942:tabell eller vy finns inte infoga", vill jag nämna en annan möjlig orsak till detta fel (åtminstone i Oracle 12c):en tabell använder en sekvens för att ställa in ett standardvärde och användaren som kör infogningsfrågan har inte väljarbehörighet för sekvensen. Detta var mitt problem och det tog mig onödigt lång tid att ta reda på det.
För att återskapa problemet, kör följande SQL som 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;
Kör sedan denna insert-sats som user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Resultatet blir "ORA-00942:tabell eller vy finns inte" även om user2
har behörighet att infoga och välja på user1.customer
tabellen och prefixet är korrekt i tabellen med schemaägarens namn. För att undvika problemet måste du ge vald behörighet för sekvensen:
grant select on seq_customer_id to user2;