Тъй като тази публикация е най-горната, намерена в stackoverflow при търсене на „ORA-00942:таблица или изглед не съществува вмъкване“, искам да спомена друга възможна причина за тази грешка (поне в Oracle 12c):таблица използва последователност за да зададете стойност по подразбиране и потребителят, изпълняващ заявката за вмъкване, няма привилегия за избор на последователността. Това беше моят проблем и ми отне ненужно много време, за да го разбера.
За да възпроизведете проблема, изпълнете следния SQL като 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;
След това изпълнете този израз за вмъкване като user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Резултатът ще бъде "ORA-00942:таблица или изглед не съществува", въпреки че user2
има привилегии за вмъкване и избор на user1.customer
таблица и правилно поставя префикс на таблицата с името на собственика на схемата. За да избегнете проблема, трябва да предоставите привилегия за избор на последователността:
grant select on seq_customer_id to user2;