2015-09-10 1 views
5

में फ़ंक्शन का उपयोग नहीं किया जा सकता है, मैं पैकेज बनाने के बिना अपने पाइपलाइन फ़ंक्शन का परीक्षण करना चाहता हूं। निम्नलिखित उदाहरण सरलीकृत है:पीएलएस -00231: एसक्यूएल

DECLARE 
    FUNCTION testDC RETURN NCOL PIPELINED IS 
    BEGIN 
     PIPE ROW(5); 
    END; 
BEGIN 
    FOR cur IN (select * from table (testDC())) LOOP 
     dbms_output.put_line('--> '); 
    END LOOP; 
END; 

लेकिन मैं इस त्रुटि मिलती है:

ORA-06550: line 7, column 7: pls-00231: function TESTDC may not be used in SQL
ORA-06550: line 7, column 7: PL/SQL: ORA-00904: : invalid identifier
ORA-06550: line 7, column 7: PL/SQL: SQL Statement ignored

इन समारोह का परीक्षण करने का इससे बेहतर तरीका क्या है?

+0

आप परीक्षण करने की कोशिश कर रहे हैं? आप सिर्फ फ़ंक्शन को कॉल करना चाहते हैं और प्रत्येक पंक्ति के लिए अपना तीर प्रिंट करना चाहते हैं? (जो उस कार्य के लिए एक बार है जैसा आपने इसे दिखाया है) –

+0

हां, मैं बस फ़ंक्शन को कॉल करना चाहता हूं और प्रत्येक पंक्ति के लिए अपना तीर प्रिंट करना चाहता हूं –

+2

आपका फ़ंक्शन ('testDC') निजी रूप से आपके अज्ञात ब्लॉक में घोषित किया गया है, इसलिए आपके द्वारा चलाए जाने वाले किसी भी प्रश्न (आपके ब्लॉक में किसी भी प्रश्न सहित) इसे देखने में सक्षम नहीं होंगे। यह उन मामलों में से एक है जहां हम एसक्यूएल और पीएल/एसक्यूएल संदर्भों के बीच अलगाव देखते हैं। –

उत्तर

6

अपने पाइपलाइन फ़ंक्शन को स्टैंडअलोन प्रक्रिया या पैकेज सदस्य के रूप में बनाएं। फिर आप इसे अपनी स्क्रिप्ट से कॉल कर सकते हैं।

यह भी सुनिश्चित करें कि आपके द्वारा संदर्भित एनसीओएल पैरामीटर को स्कीमा में घोषित किया गया है जिसे कॉलिंग स्क्रिप्ट द्वारा एक्सेस किया जा सकता है।

+0

"पैकेज सदस्य" = "spec के लिए हस्ताक्षर जोड़ें"? –

+0

@ जेरोमीफ्रेंच एक पैकेज सदस्य एक फ़ंक्शन या प्रक्रिया है जिसे पैकेज में परिभाषित किया गया है। इस मामले में वर्चुअल टेबल लौटने वाला एक फ़ंक्शन ओपी के प्रश्न का उत्तर देगा। – kevinsky

2

आप पीएल/एसक्यूएल में सीधे एक टेबल फ़ंक्शन तक नहीं पहुंच सकते - नीचे परीक्षण केस देखें। तो जैसा कि अन्य ने बताया है कि आपको टेबल फ़ंक्शन को स्टैंडअलोन या पैक के रूप में परिभाषित करना होगा।

DECLARE 
    res NUMBER; 
    FUNCTION testDC RETURN NCOL PIPELINED IS 
    BEGIN 
     PIPE ROW(5); 
    END; 

BEGIN 
     res := testDC(); 
     dbms_output.put_line('--> '||res); 

END; 
/


ORA-06550: line 3, column 12: 
PLS-00653: aggregate/table functions are not allowed in PL/SQL scope 
संबंधित मुद्दे