पीएल / एसक्यूएल - प्रक्रियाएं
इस अध्याय में, हम पीएल / एसक्यूएल में प्रक्रियाओं पर चर्चा करेंगे। एsubprogramएक प्रोग्राम यूनिट / मॉड्यूल है जो एक विशेष कार्य करता है। ये उपप्रोग्राम बड़े कार्यक्रमों को बनाने के लिए संयुक्त होते हैं। इसे मूल रूप से 'मॉड्यूलर डिजाइन' कहा जाता है। एक उपप्रोग्राम को दूसरे उपप्रोग्राम या प्रोग्राम द्वारा बुलाया जा सकता है जिसे कहा जाता हैcalling program।
एक उपप्रोग्राम बनाया जा सकता है -
- स्कीमा स्तर पर
- एक पैकेज के अंदर
- एक पीएल / एसक्यूएल ब्लॉक के अंदर
स्कीमा स्तर पर, उपप्रोग्राम एक है standalone subprogram। यह CREATE PROCEDURE या CREATE FUNCTION स्टेटमेंट के साथ बनाया गया है। इसे डेटाबेस में संग्रहीत किया जाता है और इसे DROP PROCEDURE या DROP FUNCTION स्टेटमेंट के साथ डिलीट किया जा सकता है।
एक पैकेज के अंदर बनाया गया एक उपप्रोग्राम ए है packaged subprogram। इसे डेटाबेस में संग्रहीत किया जाता है और केवल तभी हटाया जा सकता है जब पैकेज को DROP पैकेज विवरण के साथ हटा दिया जाता है। हम अध्याय में पैकेजों पर चर्चा करेंगे'PL/SQL - Packages'।
पीएल / एसक्यूएल सबप्रोग्राम को पीएल / एसक्यूएल ब्लॉक का नाम दिया गया है जिसे मापदंडों के एक सेट के साथ लागू किया जा सकता है। PL / SQL दो प्रकार के उपप्रोग्राम प्रदान करता है -
Functions- ये उपप्रोग्राम एक एकल मान लौटाते हैं; मुख्य रूप से एक मूल्य की गणना और वापसी के लिए उपयोग किया जाता है।
Procedures- ये उपप्रोग्राम सीधे मूल्य नहीं लौटाते हैं; मुख्य रूप से एक क्रिया करते थे।
यह अध्याय ए के महत्वपूर्ण पहलुओं को कवर करने जा रहा है PL/SQL procedure। हम चर्चा करेंगेPL/SQL function अगले अध्याय में
पीएल / एसक्यूएल सबप्रोग्राम के हिस्से
प्रत्येक PL / SQL उपप्रोग्राम में एक नाम होता है, और एक पैरामीटर सूची भी हो सकती है। अनाम पीएल / एसक्यूएल ब्लॉकों की तरह, नामित ब्लॉकों में भी निम्नलिखित तीन भाग होंगे -
S.No | भागों और विवरण |
---|---|
1 | Declarative Part यह एक वैकल्पिक हिस्सा है। हालाँकि, एक उपप्रोग्राम के लिए घोषणात्मक भाग DECLARE कीवर्ड से शुरू नहीं होता है। इसमें प्रकार, कर्सर, स्थिरांक, चर, अपवाद और नेस्टेड उपप्रोग्राम की घोषणाएं शामिल हैं। ये आइटम सबप्रोग्राम के लिए स्थानीय हैं और उपप्रोग्राम के निष्पादन के पूरा होने पर मौजूद हैं। |
2 | Executable Part यह एक अनिवार्य हिस्सा है और इसमें ऐसे कथन शामिल हैं जो निर्दिष्ट कार्रवाई करते हैं। |
3 | Exception-handling यह फिर से एक वैकल्पिक हिस्सा है। इसमें वह कोड होता है जो रन-टाइम त्रुटियों को संभालता है। |
एक प्रक्रिया बनाना
के साथ एक प्रक्रिया बनाई जाती है CREATE OR REPLACE PROCEDUREबयान। क्रिएट या रिपोर्ट प्रक्रिया विवरण के लिए सरलीकृत वाक्यविन्यास इस प्रकार है -
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
कहाँ पे,
प्रक्रिया-नाम प्रक्रिया के नाम को निर्दिष्ट करता है।
[या प्रतिक्रिया] विकल्प एक मौजूदा प्रक्रिया के संशोधन की अनुमति देता है।
वैकल्पिक पैरामीटर सूची में नाम, मोड और मापदंडों के प्रकार शामिल हैं। IN उस मूल्य का प्रतिनिधित्व करता है जो बाहर से पारित किया जाएगा और OUT उस पैरामीटर का प्रतिनिधित्व करता है जिसका उपयोग प्रक्रिया के बाहर एक मूल्य वापस करने के लिए किया जाएगा।
प्रक्रिया-शरीर में निष्पादन योग्य भाग होता है।
स्टैंडअलोन प्रक्रिया बनाने के लिए IS कीवर्ड के बजाय AS कीवर्ड का उपयोग किया जाता है।
उदाहरण
निम्न उदाहरण एक सरल प्रक्रिया बनाता है जो स्ट्रिंग को प्रदर्शित करता है 'हैलो वर्ल्ड!' निष्पादित होने पर स्क्रीन पर।
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/
जब SQL कोड का उपयोग करके उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम देगा -
Procedure created.
एक स्टैंडअलोन प्रक्रिया का निष्पादन
एक स्टैंडअलोन प्रक्रिया को दो तरीकों से बुलाया जा सकता है -
का उपयोग करते हुए EXECUTE कीवर्ड
पीएल / एसक्यूएल ब्लॉक से प्रक्रिया का नाम कॉलिंग
नाम की उपरोक्त प्रक्रिया 'greetings' EXECUTE कीवर्ड के साथ कहा जा सकता है -
EXECUTE greetings;
उपरोक्त कॉल प्रदर्शित होगी -
Hello World
PL/SQL procedure successfully completed.
प्रक्रिया को दूसरे PL / SQL ब्लॉक से भी बुलाया जा सकता है -
BEGIN
greetings;
END;
/
उपरोक्त कॉल प्रदर्शित होगी -
Hello World
PL/SQL procedure successfully completed.
एक स्टैंडअलोन प्रक्रिया को हटाना
के साथ एक स्टैंडअलोन प्रक्रिया को हटा दिया जाता है DROP PROCEDUREबयान। एक प्रक्रिया को हटाने के लिए सिंटैक्स है -
DROP PROCEDURE procedure-name;
आप निम्न कथन का उपयोग करके अभिवादन प्रक्रिया को छोड़ सकते हैं -
DROP PROCEDURE greetings;
पीएल / एसक्यूएल सबप्रोग्राम में पैरामीटर मोड
निम्न तालिका PL / SQL उपप्रोग्राम में पैरामीटर मोड को सूचीबद्ध करती है -
S.No | पैरामीटर मोड और विवरण |
---|---|
1 | IN एक पैरामीटर आपको उपप्रोग्राम के लिए एक मान पास करने देता है। It is a read-only parameter। उपप्रोग्राम के अंदर, एक IN पैरामीटर एक स्थिरांक की तरह कार्य करता है। इसे एक मान नहीं सौंपा जा सकता है। आप IN पैरामीटर के रूप में एक निरंतर, शाब्दिक, आरंभिक चर या अभिव्यक्ति पारित कर सकते हैं। आप इसे एक डिफ़ॉल्ट मान के लिए प्रारंभ भी कर सकते हैं; हालाँकि, उस स्थिति में, यह उपप्रोग्राम कॉल से छोड़ा गया है।It is the default mode of parameter passing. Parameters are passed by reference। |
2 | OUT OUT पैरामीटर कॉलिंग प्रोग्राम के लिए एक मान देता है। सबप्रोग्राम के अंदर, एक OUT पैरामीटर एक चर की तरह काम करता है। आप इसका मान बदल सकते हैं और इसे निर्दिष्ट करने के बाद मान को संदर्भित कर सकते हैं।The actual parameter must be variable and it is passed by value। |
3 | IN OUT एक IN OUTपैरामीटर एक उपप्रोग्राम के लिए एक प्रारंभिक मान पास करता है और कॉलर को एक अद्यतन मान देता है। इसे एक मान दिया जा सकता है और मूल्य को पढ़ा जा सकता है। IN OUT औपचारिक पैरामीटर के अनुरूप वास्तविक पैरामीटर एक चर होना चाहिए, न कि एक स्थिर या एक अभिव्यक्ति। औपचारिक पैरामीटर को एक मान सौंपा जाना चाहिए।Actual parameter is passed by value. |
IN & OUT मोड उदाहरण 1
यह प्रोग्राम न्यूनतम दो मान पाता है। यहां, यह प्रक्रिया IN मोड का उपयोग करते हुए दो नंबर लेती है और OUT मापदंडों का उपयोग करके अपना न्यूनतम रिटर्न देती है।
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
/
जब एसक्यूएल प्रॉम्प्ट पर उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
Minimum of (23, 45) : 23
PL/SQL procedure successfully completed.
और बाहर मोड उदाहरण 2
यह प्रक्रिया एक पारित मूल्य के वर्ग की गणना करती है। यह उदाहरण दिखाता है कि हम एक मान को स्वीकार करने के लिए एक ही पैरामीटर का उपयोग कैसे कर सकते हैं और फिर एक और परिणाम दे सकते हैं।
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
/
जब एसक्यूएल प्रॉम्प्ट पर उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
Square of (23): 529
PL/SQL procedure successfully completed.
पासिंग पैरामीटर्स के लिए तरीके
वास्तविक मापदंडों को तीन तरीकों से पारित किया जा सकता है -
- स्थिति संबंधी संकेतन
- नामकरण संकेतन
- मिश्रित संकेतन
स्थिति संबंधी सूचना
स्थिति संकेतन में, आप इस प्रक्रिया को कॉल कर सकते हैं -
findMin(a, b, c, d);
स्थितिगत संकेतन में, पहले औपचारिक पैरामीटर को पहले औपचारिक पैरामीटर के लिए प्रतिस्थापित किया जाता है; दूसरा वास्तविक पैरामीटर दूसरे औपचारिक पैरामीटर के लिए प्रतिस्थापित किया जाता है, और इसी तरह। इसलिए,a के लिए प्रतिस्थापित किया जाता है x, b के लिए प्रतिस्थापित किया जाता है y, c के लिए प्रतिस्थापित किया जाता है z तथा d के लिए प्रतिस्थापित किया जाता है m।
जिसका नाम नोटेशन है
नामित संकेतन में, वास्तविक पैरामीटर औपचारिक पैरामीटर के साथ जुड़ा हुआ है जिसका उपयोग किया जाता है arrow symbol ( => )। प्रक्रिया कॉल निम्नलिखित की तरह होगा -
findMin(x => a, y => b, z => c, m => d);
मिश्रित सूचना
मिश्रित संकेतन में, आप दोनों सूचनाओं को प्रक्रिया कॉल में मिला सकते हैं; हालाँकि, स्थिति संकेतन को नाम संकेतन से पहले होना चाहिए।
निम्नलिखित कॉल कानूनी है -
findMin(a, b, c, m => d);
हालाँकि, यह कानूनी नहीं है:
findMin(x => a, b, c, d);