आपका संग्रहित प्रक्रियाओं के रूप में कोडित काम । समस्या अंतिम पंक्ति के साथ है, यह आपकी संग्रहीत प्रक्रियाओं में से किसी एक को आमंत्रित करने में असमर्थ है।
एसक्यूएल * प्लस में तीन विकल्प हैं: call
, exec
, और एक अनौपचारिक पीएल/एसक्यूएल ब्लॉक।
call
एक SQL कीवर्ड प्रतीत होता है, और SQL संदर्भ में दस्तावेज़ित है। http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG सिंटैक्स आरेख इंगित करता है कि पेरेंटिस की आवश्यकता होती है, भले ही कॉल रूटीन में कोई तर्क पारित न हो।
CALL test_sp_1();
एक अनाम PL/SQL ब्लॉक PL/SQL कि एक नामित प्रक्रिया, समारोह, ट्रिगर के अंदर नहीं है, आदि यह अपने प्रक्रिया कॉल करने के लिए इस्तेमाल किया जा सकता है।
BEGIN
test_sp_1;
END;
/
Exec
एक एसक्यूएल * प्लस आदेश ऊपर गुमनाम ब्लॉक के लिए एक शॉर्टकट है।EXEC <procedure_name>
BEGIN <procedure_name>; END;
पूर्ण उदाहरण के रूप में डीबी सर्वर से पारित हो जाएगा:
एक सामान्य प्रक्रिया के लिए एक::
CREATE OR REPLACE SP_1() AS
BEGIN
/* BODY */
END SP_1;
कॉलिंग प्रक्रिया
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Test works');
5 END;
6/
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE test_sp_1
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Testing');
5 test_sp;
6 END;
7/
Procedure created.
SQL> CALL test_sp_1();
Testing
Test works
Call completed.
SQL> exec test_sp_1
Testing
Test works
PL/SQL procedure successfully completed.
SQL> begin
2 test_sp_1;
3 end;
4/
Testing
Test works
PL/SQL procedure successfully completed.
SQL>
स्रोत
2010-08-05 20:46:39
कि के लिए धन्यवाद लेकिन जब मुझे लगता है कि का उपयोग कर चलाने का प्रयास कॉल SP_1; मुझे निम्न त्रुटि मिलती है। आदेश में लाइन 21 पर प्रारंभ करने में त्रुटि: कॉल test_sp_1 त्रुटि की रिपोर्ट: एसक्यूएल त्रुटि: ORA-06,576: एक मान्य समारोह या प्रक्रिया नाम 06576. 00000 - "एक मान्य समारोह या प्रक्रिया का नाम" * कारण: सका एक फ़ंक्शन नहीं मिला (यदि कोई आईएनटीओ क्लॉज मौजूद था) या एक प्रक्रिया (यदि कथन में आईएनटीओ क्लॉज नहीं था) कॉल पर नहीं मिला। * कार्यवाही: फ़ंक्शन या प्रक्रिया को आमंत्रित करने के लिए कथन बदलें – electricsheep
@ माइकल लॉकवुड - क्या आप अपना कोड अपने मूल प्रश्न में पोस्ट कर सकते हैं? साथ ही, यदि आप SQL * प्लस जैसे टूल का उपयोग करके फ़ंक्शन को कॉल कर रहे हैं, तो आपको एक वैरिएबल पर रिटर्न वैल्यू असाइन करने की आवश्यकता है। – dcp
@ML: जब भी कॉल काम नहीं करता है (वैध पीएल/एसक्यूएल कथन नहीं है) और डीसीपी ने आपको यह सही तरीके से कैसे किया है, तो आप अभी भी कॉल का उपयोग करने का प्रयास क्यों कर रहे हैं? –