Ponieważ ten wpis jest najwyższym znalezionym na stackoverflow przy wyszukiwaniu "ORA-00942: tabela lub widok nie istnieje", chcę wspomnieć o innej możliwej przyczynie tego błędu (przynajmniej w Oracle 12c): a tabela używa sekwencji do ustawienia wartości domyślnej, a użytkownik wykonujący kwerendę wstawiania nie ma uprawnień do wybierania sekwencji. To był mój problem i zajęło mi to niepotrzebnie dużo czasu, aby to rozgryźć.
Aby odtworzyć ten problem, należy wykonać następujące 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 wykonać tej instrukcji insert jako user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
wynik będzie „ORA-00942: tabela lub widok nie istnieje "nawet jeśli user2
ma uprawnienia do wstawiania i wybierania na tabeli user1.customer
i poprawnie wstawia prefiks tabeli z nazwą właściciela schematu. Aby uniknąć problemu, musisz przyznać przywilej select na sekwencji:
grant select on seq_customer_id to user2;
'dba_objects' nie jest dostępny dla zwykłego użytkownika. Zamiast tego powinieneś użyć 'all_objects'. –
Wielkie dzięki za zainteresowanie, Ive wykonane pierwsze zapytanie, aby zobaczyć właściciela tabeli "klienta", otrzymałem wynik "0 wybranych wierszy". oznacza to, że użytkownik, który utworzyłem, nie potrzebuje potrzebnych uprawnień? – user2304042