दृश्य बनाते समय किसी समस्या के निदान में पहला कदम select
. का प्रयास करना है अपने आप भाग। इस मामले में आपको अभी भी ORA-00942 त्रुटि मिलेगी, लेकिन समस्या अब केवल एक क्वेरी और एक्सेस समस्या है और विशेष रूप से दृश्य के साथ नहीं है।
जब आपको ORA-00942 मिलता है:टेबल या व्यू मौजूद नहीं है , ऐसा इसलिए है क्योंकि या तो:
-
आपके द्वारा लिखा गया तालिका या दृश्य नाम वास्तव में मौजूद नहीं है।
-
स्पेलिंग चेक करें - हो सकता है कि कोई टाइपो हो।
-
क्या आप उस डेटाबेस से जुड़े हैं जहां यह मौजूद है? शायद आप एक ऐसे परीक्षण सिस्टम पर हैं जिसमें यह नहीं है।
-
क्वेरी
dba_objects
यह देखने के लिए कि तालिका किसी अन्य स्कीमा में मौजूद है या नहीं। (यदि आपके पास dba_objects,all_objects
क्वेरी करने का विशेषाधिकार नहीं है वह सब कुछ सूचीबद्ध करता है जिसे देखने की आपके पास अनुमति है, जो कुछ मदद हो सकती है।)
-
-
यह वास्तव में मौजूद है, लेकिन यह किसी अन्य स्कीमा में है।
उस स्थिति में, दो संभावित समस्याएं हो सकती हैं:-
आपको इसे पूछने की अनुमति नहीं है। तालिका के स्वामी को
grant read on xyz
की आवश्यकता है (xyz
. के लिए वास्तविक तालिका नाम को प्रतिस्थापित करें ) या तो-
आप
-
public
(यदि आप चाहते हैं कि हर कोई डेटा देख सके, हमेशा सलाह नहीं दी जाती) -
a भूमिका जो आपके पास है (लेकिन संग्रहित PL/SQL या दृश्यों , हालांकि, यह संभव है कि आप अपनी भूमिका के कारण किसी अन्य स्कीमा में तालिका को क्वेरी कर सकते हैं, लेकिन फिर भी इसका उपयोग करने वाली एक दृश्य या प्रक्रिया बनाने में सक्षम नहीं हैं।)
-
-
आपको स्कीमा निर्दिष्ट करने की आवश्यकता है। मान लें कि आप
REGIONS
से पूछताछ करना चाहते हैंHR
में तालिका लेकिन आपSCOTT
. के रूप में जुड़े हुए हैं . यदि आप केवलselect * from regions
यहSCOTT.REGIONS
की तलाश करेगा , जो मौजूद नहीं है। इसे ठीक करने के लिए, निम्न में से कोई एक कार्य करें:-
hr.regions
. का उपयोग करें आपकी क्वेरी में स्पष्ट रूप से। -
अपने स्कीमा में,
create or replace synonym regions for hr.regions;
अब जब भी आपregions
का संदर्भ लें , डेटाबेस स्वचालित रूप सेhr.regions
. पर पुनर्निर्देशित हो जाएगा । -
सार्वजनिक समानार्थी शब्द बनाने की अनुमति के साथ किसी भी स्कीमा में:
create or replace public synonym regions for hr.regions;
अब डेटाबेस से जुड़ने वाले प्रत्येक व्यक्ति के पासregions
. का कोई भी संदर्भ होगाhr.regions
. पर रीडायरेक्ट किया गया , जो हमेशा एक अच्छा विचार नहीं है, लेकिन वैसे भी यह एक विकल्प है। -
alter session set current_schema = hr;
अब ऑब्जेक्ट के नामों को हल करने के लिए डिफ़ॉल्ट स्कीमाHR
है और वह नहीं जिसे आपने लॉग इन किया था। उन अनुप्रयोगों के लिए जो हमेशा तालिकाओं के स्वामी से भिन्न उपयोगकर्ता के रूप में लॉग इन करते हैं, आप एक लॉगऑन ट्रिगर के बाद तो यह हमेशा सेट होता है। तब वे केवलregions
. का उल्लेख कर सकते हैं आदि बिना किसी स्कीमा को निर्दिष्ट किए और बिना किसी समानार्थी शब्द के।
-
-