Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ऑरैकल टेबल या दृश्य अंदर संग्रहीत प्रक्रिया से मौजूद नहीं है

सबसे अधिक संभावना है, समस्या यह है कि अनुदान एक भूमिका के माध्यम से किया गया था। किसी उपयोगकर्ता को दिए गए विशेषाधिकार एक निश्चित अधिकार संग्रहीत कार्यविधि (डिफ़ॉल्ट) में उपलब्ध नहीं होते हैं।

SQL डेवलपर में, यह सत्यापित करना अपेक्षाकृत आसान है कि यह समस्या है। यदि आप कमांड चलाते हैं

SET ROLE none

और फिर सेलेक्ट स्टेटमेंट चलाएँ, मुझे उम्मीद है कि आपको वही ORA-00942 त्रुटि मिलेगी।

यह मानते हुए कि मामला है, समाधान आम तौर पर यह पूछना होगा कि YYY स्कीमा में तालिकाओं के मालिक भूमिका के माध्यम से पहुंच प्रदान करने के बजाय सीधे आपको टेबल तक पहुंच प्रदान करें। इसे छोड़कर, आप घोषणा में AUTHID CURRENT_USER जोड़कर अपनी संग्रहीत प्रक्रिया को एक आवेदक के अधिकार संग्रहीत प्रक्रिया के रूप में परिभाषित कर सकते हैं। ऐसा होगा कि प्रक्रिया के कॉलर को अंतर्निहित वस्तुओं तक पहुंच की आवश्यकता होगी लेकिन यह आपकी प्रक्रियाओं को भूमिका के माध्यम से दिए गए विशेषाधिकारों का उपयोग करने की अनुमति देगा।

यदि आप एक आह्वानकर्ता के अधिकार संग्रहीत प्रक्रिया बनाना चाहते हैं, तो आपको विशेषाधिकार जांच को रनटाइम पर स्थगित करने के लिए गतिशील SQL का उपयोग करके तालिका नाम का भी उल्लेख करना होगा। तो आपके पास कुछ ऐसा होगा

CREATE OR REPLACE PROCEDURE PRC_SOMESP 
  AUTHID CURRENT_USER
AS 
  l_cnt pls_integer;
BEGIN
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM yyy.TableA' INTO l_cnt;
END PRC_SOMESP;

यदि आप एक आवेदक के अधिकार संग्रहीत प्रक्रिया चाहते हैं जो स्कीमा XXX में TableA तालिका से पूछताछ करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C# और ODP.NET से पैकेज में फ़ंक्शन को कॉल करने के लिए कोड

  2. ऑरैकल में एक कॉलम में सबसे लंबी पंक्ति की लंबाई पाएं

  3. क्या पीएल/एसक्यूएल के पास जावा के बराबर स्ट्रिंगटोकनाइज़र है?

  4. Oracle 10g PL/SQL में 'जारी रखें' कीवर्ड

  5. समूह मूल्यों का चयन करने के लिए मैक्स () फ़ंक्शन का उपयोग करना