Ponieważ ten post jest najwyższym znalezionym na stackoverflow podczas wyszukiwania „ORA-00942:tabela lub widok nie istnieje wstaw”, chcę wspomnieć o innej możliwej przyczynie tego błędu (przynajmniej w Oracle 12c):tabela używa sekwencji aby ustawić wartość domyślną, a użytkownik wykonujący zapytanie wstawiania nie ma uprawnień wyboru w sekwencji. To był mój problem i zajęło mi niepotrzebnie dużo czasu, aby go rozwiązać.
Aby odtworzyć problem, wykonaj następujące polecenie 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;
Następnie wykonaj tę instrukcję wstawiania jako user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Wynikiem będzie „ORA-00942:tabela lub widok nie istnieje”, mimo że user2
ma uprawnienia do wstawiania i wybierania na user1.customer
table i poprawnie poprzedza tabelę nazwą właściciela schematu. Aby uniknąć problemu, musisz przyznać uprawnienie select do sekwencji:
grant select on seq_customer_id to user2;