2010-11-16 25 views
7
से "तालिका या दृश्य मौजूद नहीं है"

scenarion इस तरह है ...ओरेकल के अंदर संग्रहित प्रक्रिया

मैं एक नाम स्थान XXX जहां मैं कुछ टेबल और कुछ संग्रहित प्रक्रियाओं बनाया है ...

वे एक नाम स्थान YYY जहां वे कुछ टेबल बनाया ...

है कि वे उनके तालिकाओं के लिए XXX पहुँच प्रदान की गई है, इसलिए जब मैं XXX कनेक्शन का उपयोग कर SQL डेवलपर को conect, मैं कर सकते हैं:

SELECT * FROM YYY.TableA 

लेकिन अगर मैं संग्रहीत प्रक्रिया (या तो सरल संग्रहित प्रक्रिया या पैकेज) के अंदर से वही कथन चलाने की कोशिश करता हूं, तो संग्रहीत प्रक्रिया संकलित नहीं होती है। यह बहुत सारे एसपी के साथ होता है। क्या कोई अन्य अनुमति है जिसके लिए मुझे पूछना है ??? मैं इस तरह एसपी चला रहा हूं:

CREATE OR REPLACE PROCEDURE PRC_SOMESP(
) AS BEGIN 
END PRC_SOMESP; 

प्रक्रियाएं जो YYY तालिकाओं तक नहीं पहुंचती हैं, अच्छी तरह से संकलित होती हैं।

अग्रिम धन्यवाद।

जस्टिन गुफा प्रतिक्रिया के बाद, मैं एसपी के लिए "AUTHID CURRENT_USER" वाक्य जोड़ने की कोशिश कर रहा हूँ, लेकिन एक ही हो रही है परिणाम "तालिका या दृश्य मौजूद नहीं है":

CREATE OR REPLACE PROCEDURE PRC_PROC1(PARAMETERS...) 
AUTHID CURRENT_USER 
AS 
    MYVAR NUMBER; 
BEGIN 
    STATEMENTS... 
END PRC_PROC1; 

CREATE OR REPLACE PACKAGE PKG_PROC2 
AUTHID CURRENT_USER 
AS 
TYPE T_CURSOR IS REF CURSOR; 
PROCEDURE PRC_PROC2(PARAMETERS...) 
END PKG_PROC2 

मैं और कुछ की जांच करना चाहिए? ??

+0

सबसे पहले, आप एसपी नहीं चलाते जैसे आप कहते हैं कि आप करते हैं, आप उन्हें बनाते हैं। दूसरा, सुनिश्चित करें कि 'PRC_SOMESP()' का चयन करने के लिए 'YYY.TableA' पर सही निजीकरण है। –

उत्तर

0

स्कीमा XXX अगर आप YYY स्कीमा से तालिकाओं का उपयोग पर अपने संग्रहित प्रक्रियाओं में, सुनिश्चित करें कि आप पूरी तरह से उन्हें योग्य:

select count(1) from YYY.TableA; 

अन्य बात पर विचार करना (आवरण है मामले में आप में बड़े तथा छोटे मिश्रण कर रहे हैं अपने ओरेकल पहचानकर्ता)।

एक आखिरी बात: आपको जो त्रुटि मिल रही है उसे पोस्ट करें। इस तरह आपकी मदद करना आसान होगा।

+0

यदि आपके डेटाबेस में प्रति ग्राहक एक स्कीमा है उदाहरण के लिए, यह समाधान काम करेगा लेकिन बहुत ही सुरुचिपूर्ण नहीं होगा। प्रत्येक ग्राहक के लिए प्रत्येक ग्राहक के लिए काम करने के लिए यह एक ही एसपी का एक संस्करण लेगा। –

11

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

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

SET ROLE none 

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

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

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

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; 

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

+0

हां, यह वास्तव में समस्या जस्टिन है ... क्या आप कृपया लिख ​​सकते हैं कि संग्रहीत प्रक्रिया घोषणा कैसे "AUTHID CURRENT_USER" वाक्य जोड़कर होनी चाहिए ??? मैंने यह अन्य लिंक पढ़ा लेकिन मुझे कोई उदाहरण नहीं मिला: http://articles.techrepublic.com.com/5100-10878_11-6183799.html – user509925

+0

@ user509925 - मेरे उत्तर में उदाहरण जोड़ा गया। –

+0

हाय फिर से, मैंने अपने प्रश्न में कुछ परिणाम जोड़े, क्या आप कृपया मदद कर सकते हैं ??? – user509925

0

मुझे बस यही समस्या थी। मैं एक डीबीए नहीं हूं लेकिन जिस तरह से मुझे समझाया गया है वह है "मूल बात यह है कि आपकी व्यक्तिगत भूमिका विशेषाधिकार संग्रहीत प्रक्रिया के भीतर प्रभावी नहीं हैं।"

मैं इस तरह, टेबल के मालिक के साथ की सपा नाम अर्हता प्राप्त करने की सलाह दी गई:

CREATE OR REPLACE PROCEDURE yyy.PRC_PROC1(PARAMETERS...) etc 

यह मेरा देव वातावरण में मेरे मामले में काम किया। मेरे पर्यावरण में केवल एक नामस्थान है इसलिए मुझे यकीन नहीं है कि यह ओपी के प्रश्न को हल करेगा लेकिन आशा है कि इस मुद्दे को देखने वाले अगले 18 के लोगों के लिए इस मुद्दे को आगे बढ़ाने में मदद मिलेगी ;-)।

इसके अलावा, जब मैं अपने एसपी को उत्पादन में डालता हूं, तो मुझे क्वालीफायर को हटाने की आवश्यकता होगी और हमारे इंस्टॉलेशन सॉफ़्टवेयर उचित प्राधिकरण के तहत बनाए जाएंगे।

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