2013-04-21 13 views
10

Używam programisty SQL i po utworzeniu użytkownika utworzyłem połączenie z moją bazą danych, po czym utworzyłem połączenie z tym użytkownikiem z wszystkimi potrzebnymi uprawnieniami.Błąd SQL: tabela lub widok ORA-00942 nie istnieje

Ale gdy próbuję postępować po otrzymuję błąd SQL

ORA-00942 table or view does not exist.:


INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson') 

Odpowiedz

9

albo użytkownik nie posiada uprawnień, aby zobaczyć tabelę, tabela nie istnieje lub używasz zapytania w niewłaściwym schemacie, czy tabela istnieje?

select owner, 
     object_name 
from dba_objects 
where object_name = any ('CUSTOMER','customer'); 

jakie przywileje zostały przyznane?

grant select, insert on customer to user; 

Czy w pierwszym zapytaniu wyświetlasz zapytanie dotyczące właściciela?

+4

'dba_objects' nie jest dostępny dla zwykłego użytkownika. Zamiast tego powinieneś użyć 'all_objects'. –

+0

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

6

Nie można uzyskać bezpośredniego dostępu do tabeli z nazwą "klient". Powinien to być "user1.customer" lub utworzyć synonim "klient" dla użytkownika 2 wskazujący na "user1.customer". nadzieję, że to pomaga ..

1

Oto odpowiedź: http://www.dba-oracle.com/concepts/synonyms.htm

synonim Oracle w zasadzie pozwala na tworzenie wskaźnik do obiektu, który istnieje gdzieś indziej. Potrzebujesz synonimów Oracle, ponieważ kiedy jesteś zalogowany do Oracle, wyszukuje wszystkie obiekty, których dotyczy zapytanie w twoim schemacie (koncie). Jeśli ich tam nie ma, spowoduje to błąd informujący, że nie istnieją.

10

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; 
+0

Po prostu przeszedł ten sam scenariusz. Bardzo irytujące, że otrzymujesz 00942, gdy faktycznym problemem jest problem z sekwencją uprawnień. – SeattleDucati

Powiązane problemy