Fordi dette indlæg er det øverste, der findes på stackoverflow, når du søger efter "ORA-00942:tabel eller visning findes ikke indsæt", vil jeg nævne en anden mulig årsag til denne fejl (i det mindste i Oracle 12c):en tabel bruger en sekvens for at indstille en standardværdi, og brugeren, der udfører indsættelsesforespørgslen, har ikke valgrettigheder til sekvensen. Dette var mit problem, og det tog mig unødvendig lang tid at finde ud af det.
For at reproducere problemet skal du udføre følgende 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;
Udfør derefter denne insert-sætning som user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Resultatet bliver "ORA-00942:tabel eller visning findes ikke", selvom user2
har indsæt og vælg privilegier på user1.customer
tabel og præfikser tabellen korrekt med navnet på skemaejeren. For at undgå problemet skal du tildele valgrettigheder til sekvensen:
grant select on seq_customer_id to user2;