खोज…
वाक्य - विन्यास
बनाएँ [या प्रतिक्रिया] पैकेज पैकेज_नाम
[AUTHID {CURRENT_USER | Definer}]
{आईएस | जैसा}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[Contin_declaration ...]
[अपवाद_विकास ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[कर्सर_स्पेक ...]
[function_spec ...]
[process_spec ...]
[call_spec ...]
[PRAGMA RESTRICT_REFERENCES (दावे) ...]
END [package_name];
बनाएँ या पैकेज पैकेज पैकेज नाम है
समारोह फ़ंक्शननाम (पैरामीटर 1 VARCHAR2 में, paramter2 IN NUMBER) RETURN VARCHAR2;
END पैकेजनाम;
बनाएँ [या प्रतिक्रिया] पैकेज बॉडी पैकेज_नाम
{आईएस | जैसा}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[Contin_declaration ...]
[अपवाद_विकास ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[कर्सर_बॉडी ...]
[function_spec ...]
[process_spec ...]
[call_spec ...]
END [package_name];
बनाएँ या पैकेज पैकेज बॉडी पैकेज नाम है
समारोह समारोह (पैरामीटर 1 VARCHAR2 में, paramter2 IN NUMBER) RETURN VARARAR IS
घोषणाओं
शुरू
निष्पादित करने के लिए बयान
RETURN varchar2 चर
END फ़ंक्शननाम;
END पैकेजनाम;
पैकेज उपयोग
PLSQL में पैकेज प्रक्रिया, कार्य, चर, अपवाद, स्थिरांक और डेटा संरचनाओं का एक संग्रह है। आम तौर पर एक पैकेज में संसाधन एक दूसरे से संबंधित होते हैं और समान कार्यों को पूरा करते हैं।
संकुल का उपयोग क्यों करें
- प्रतिरूपकता
- बेहतर प्रदर्शन / मज़ा
एक पैकेज के हिस्से
विशिष्टता - कभी-कभी पैकेज हेडर कहा जाता है। इसमें चर और प्रकार की घोषणाएं शामिल हैं और पैकेज में होने वाले कार्यों और प्रक्रियाओं के हस्ताक्षर हैं जो पैकेज के बाहर से बुलाए जाने के लिए सार्वजनिक हैं।
पैकेज बॉडी - इसमें कोड और निजी घोषणाएँ शामिल हैं।
पैकेज विनिर्देश को पैकेज निकाय से पहले संकलित किया जाना चाहिए, अन्यथा पैकेज बॉडी संकलन त्रुटि की सूचना देगा।
ओवरलोडिंग
पैकेज में कार्य और प्रक्रियाएं ओवरलोड की जा सकती हैं। निम्न पैकेज TEST में print_number नामक दो प्रक्रियाएँ हैं, जो उनके द्वारा कहे गए मापदंडों के आधार पर अलग-अलग व्यवहार करती हैं।
create or replace package TEST is
procedure print_number(p_number in integer);
procedure print_number(p_number in varchar2);
end TEST;
/
create or replace package body TEST is
procedure print_number(p_number in integer) is
begin
dbms_output.put_line('Digit: ' || p_number);
end;
procedure print_number(p_number in varchar2) is
begin
dbms_output.put_line('String: ' || p_number);
end;
end TEST;
/
हम दोनों प्रक्रियाओं को कहते हैं। पूर्णांक पैरामीटर के साथ पहला, varchar2 के साथ दूसरा।
set serveroutput on;
-- call the first procedure
exec test.print_number(3);
-- call the second procedure
exec test.print_number('three');
उपरोक्त स्क्रिप्ट का आउटपुट है:
SQL>
Digit: 3
PL/SQL procedure successfully completed
String: three
PL/SQL procedure successfully completed
ओवरलोडिंग पर प्रतिबंध
केवल स्थानीय या पैकेज्ड सबप्रोग्राम, या प्रकार के तरीके, अतिभारित हो सकते हैं। इसलिए, आप स्टैंडअलोन सबप्रोग्राम को अधिभार नहीं दे सकते। इसके अलावा, आप दो उपप्रोग्राम को अधिभार नहीं दे सकते हैं यदि उनके औपचारिक पैरामीटर केवल नाम या पैरामीटर मोड में भिन्न हैं
एक समारोह के साथ एक पैकेज हेडर और शरीर को परिभाषित करें।
इस उदाहरण में हम एक पैकेज हेडर को परिभाषित करते हैं और एक पैकेज बॉडी एक फ़ंक्शन को समझती है।
उसके बाद हम पैकेज से एक फ़ंक्शन कह रहे हैं जो रिटर्न वैल्यू लौटाता है।
पैकेज हैडर :
CREATE OR REPLACE PACKAGE SkyPkg AS
FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
RETURN VARCHAR2;
END;
/
पैकेज शरीर :
CREATE OR REPLACE PACKAGE BODY SkyPkg AS
FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
RETURN VARCHAR2
AS
vColour VARCHAR2(100) := NULL;
BEGIN
IF vPlanet = 'Earth' THEN
vColour := 'Blue';
ELSIF vPlanet = 'Mars' THEN
vColour := 'Red';
END IF;
RETURN vColour;
END;
END;
/
पैकेज बॉडी से फ़ंक्शन को कॉल करना :
DECLARE
vColour VARCHAR2(100);
BEGIN
vColour := SkyPkg.GetSkyColour(vPlanet => 'Earth');
DBMS_OUTPUT.PUT_LINE(vColour);
END;
/