Protože tento příspěvek je nejlepším příspěvkem nalezeným na stackoverflow při hledání „ORA-00942:tabulka nebo pohled neexistuje vložit“, chci zmínit další možnou příčinu této chyby (alespoň v Oracle 12c):tabulka používá sekvenci nastavit výchozí hodnotu a uživatel provádějící vkládací dotaz nemá výběrové oprávnění pro sekvenci. To byl můj problém a trvalo mi zbytečně dlouho, než jsem na to přišel.
Chcete-li problém reprodukovat, spusťte následující SQL jako 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;
Poté proveďte tento příkaz vložení jako user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Výsledek bude „ORA-00942:tabulka nebo pohled neexistuje“, i když user2
má oprávnění pro vkládání a výběr na user1.customer
tabulka a správně před tabulkou uvádí jméno vlastníka schématu. Abyste se tomuto problému vyhnuli, musíte sekvenci udělit výběrové oprávnění:
grant select on seq_customer_id to user2;