2013-04-21 7 views
10

मैं SQL डेवलपर का उपयोग करता हूं और मैंने उपयोगकर्ता उपयोगकर्ता के साथ अपने डेटाबेस से कनेक्शन बनाया है, जब मैंने उपयोगकर्ता बनाया है और उस उपयोगकर्ता के साथ सभी आवश्यक विशेषाधिकारों के साथ एक और कनेक्शन बनाया है।एसक्यूएल त्रुटि: ORA-00942 तालिका या दृश्य मौजूद नहीं है

लेकिन जब मैं निम्नलिखित आगे बढ़ने के लिए कोशिश मैं एसक्यूएल त्रुटि

ORA-00942 table or view does not exist.:


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

उत्तर

9

या तो उपयोगकर्ता तालिका देखें करने के लिए आवश्यक विशेषाधिकार नहीं, टेबल मौजूद नहीं है या आप गलत स्कीमा

में क्वेरी चला रहे हैं, तो तालिका मौजूद है?

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

आपने कौन से विशेषाधिकार दिए हैं?

grant select, insert on customer to user; 

क्या आप पहली क्वेरी से मालिक के खिलाफ क्वेरी चला रहे हैं?

+4

'dba_objects' नियमित उपयोगकर्ता के लिए उपलब्ध नहीं है। आपको इसके बजाय 'all_objects' का उपयोग करना चाहिए। –

+0

आपकी रुचि के लिए बहुत बहुत धन्यवाद, मैंने 'ग्राहक' तालिका के मालिक को देखने के लिए पहली क्वेरी निष्पादित की, मुझे परिणाम "0 पंक्तियां चयनित" मिलीं। तो इसका मतलब है कि मेरे द्वारा बनाए गए उपयोगकर्ता को मुझे लगता है कि निजीकरण की आवश्यकता नहीं है? – user2304042

6

आप सीधे 'ग्राहक' नाम से तालिका तक नहीं पहुंच सकते हैं। या तो यह 'user1.customer' होना चाहिए या 'user1.customer' को इंगित करने वाले उपयोगकर्ता 2 के लिए समानार्थी 'ग्राहक' बनाना चाहिए। उम्मीद है कि इस मदद करता है ..

1

यहाँ एक जवाब है: http://www.dba-oracle.com/concepts/synonyms.htm

एक ओरेकल पर्याय मूल रूप से आप एक वस्तु है कि कहीं और मौजूद है के लिए सूचक बनाने के लिए अनुमति देता है। आपको ओरेकल समानार्थक की आवश्यकता है क्योंकि जब आप ओरेकल में लॉग इन होते हैं, तो यह उन सभी ऑब्जेक्ट्स की तलाश करता है जिन्हें आप अपनी स्कीमा (खाता) में पूछ रहे हैं। यदि वे वहां नहीं हैं, तो यह आपको एक त्रुटि देगा जो आपको बताएगा कि वे मौजूद नहीं हैं।

10

क्योंकि यह पोस्ट "ओआरए -00 9 42: तालिका या दृश्य मौजूद नहीं है" के लिए खोज करते समय स्टैक ओवरफ्लो पर पाया गया शीर्ष है, मैं इस त्रुटि का एक और संभावित कारण उल्लेख करना चाहता हूं (कम से कम ओरेकल 12 सी में): ए तालिका एक डिफ़ॉल्ट मान सेट करने के लिए अनुक्रम का उपयोग करती है और सम्मिलित क्वेरी निष्पादित करने वाले उपयोगकर्ता को अनुक्रम पर चुनिंदा विशेषाधिकार नहीं होता है। यह मेरी समस्या थी और इसे समझने के लिए मुझे एक अनावश्यक रूप से लंबा समय लगा।

समस्या को पुन: करने के लिए, 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 हो जाएगा: टेबल या दृश्य मौजूद नहीं है "भले ही user2user1.customer तालिका पर सम्मिलित करें और विशेषाधिकारों का चयन करें और स्कीमा स्वामी नाम के साथ तालिका को सही ढंग से उपसर्ग कर रहा है। समस्या से बचने के लिए, आपको अनुक्रम पर चुनिंदा विशेषाधिकार प्रदान करना होगा:

grant select on seq_customer_id to user2; 
+0

बस एक ही परिदृश्य के माध्यम से चला गया। बहुत परेशान है कि आपको 00 9 42 मिलते हैं जब वास्तविक समस्या एक अनुक्रम अनुमति समस्या है। – SeattleDucati

संबंधित मुद्दे