आपकी संग्रहीत कार्यविधियाँ कोडित के रूप में कार्य करती हैं। समस्या अंतिम पंक्ति के साथ है, यह आपकी किसी भी संग्रहीत कार्यविधि को लागू करने में असमर्थ है।
SQL*Plus में तीन विकल्प हैं:call
, exec
, और एक विषम PL/SQL ब्लॉक।
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
एक SQL*Plus कमांड है जो उपरोक्त अनाम ब्लॉक के लिए एक शॉर्टकट है। EXEC <procedure_name>
DB सर्वर को BEGIN <procedure_name>; END;
पूरा उदाहरण:
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>