Oracle PL / SQL पैकेज: प्रकार, विशिष्टता, निकाय (उदाहरण)

विषय - सूची:

Anonim

ओरेकल में पैकेज क्या है?

PL / SQL पैकेज एक संबंधित उपप्रोग्राम (प्रक्रिया / फ़ंक्शन) का एक एकल तत्व में तार्किक समूहन है। एक पैकेज संकलित किया जाता है और एक डेटाबेस ऑब्जेक्ट के रूप में संग्रहीत किया जाता है जिसे बाद में उपयोग किया जा सकता है।

इस ट्यूटोरियल में, आप सीखेंगे-

  • पैकेज के घटक
  • पैकेज विशिष्टता
  • पैकेज बॉडी
  • पैकेज तत्वों का जिक्र
  • PL / SQL में पैकेज बनाएँ
  • आगे की घोषणा
  • पैकेज में कर्सर उपयोग
  • अधिक भार
  • पैकेज में निर्भरता
  • पैकेज की जानकारी
  • UTL फ़ाइल - एक अवलोकन

पैकेज के घटक

PL / SQL पैकेज में दो घटक होते हैं।

  • पैकेज विशिष्टता
  • पैकेज बॉडी

पैकेज विशिष्टता

पैकेज विनिर्देश में सभी सार्वजनिक चर, कर्सर, ऑब्जेक्ट, प्रक्रिया, कार्य और अपवाद की घोषणा शामिल है।

पैकेज विनिर्देश की कुछ विशेषताएँ नीचे दी गई हैं।

  • सभी तत्व जो विनिर्देश में घोषित किए गए हैं, पैकेज के बाहर से एक्सेस किए जा सकते हैं। ऐसे तत्वों को सार्वजनिक तत्व के रूप में जाना जाता है।
  • पैकेज विनिर्देश एक स्टैंडअलोन तत्व है जिसका अर्थ है कि यह पैकेज बॉडी के बिना अकेले मौजूद हो सकता है।
  • जब भी किसी पैकेज ने संदर्भित किया है उस विशेष सत्र के लिए पैकेज का एक उदाहरण बनाया गया है।
  • एक सत्र के लिए आवृत्ति बनाए जाने के बाद, उस उदाहरण में आरंभ किए गए सभी पैकेज तत्व सत्र के अंत तक मान्य होते हैं।

वाक्य - विन्यास

CREATE [OR REPLACE] PACKAGE 
IS… END 

उपरोक्त सिंटैक्स पैकेज विनिर्देशन के निर्माण को दर्शाता है।

पैकेज बॉडी

इसमें उन सभी तत्वों की परिभाषा शामिल है जो पैकेज विनिर्देश में मौजूद हैं। इसमें उन तत्वों की परिभाषा भी हो सकती है जिन्हें विनिर्देशन में घोषित नहीं किया गया है, इन तत्वों को निजी तत्व कहा जाता है और पैकेज के अंदर से ही बुलाया जा सकता है।

नीचे एक पैकेज बॉडी की विशेषताएं हैं।

  • इसमें उन सभी उपप्रोग्रामों / शापों की परिभाषाएँ होनी चाहिए जिन्हें विनिर्देशन में घोषित किया गया है।
  • इसमें अधिक उपप्रोग्राम या अन्य तत्व भी हो सकते हैं जिन्हें विनिर्देशन में घोषित नहीं किया गया है। इन्हें निजी तत्व कहा जाता है।
  • यह एक भरोसेमंद वस्तु है, और यह पैकेज विनिर्देश पर निर्भर करता है।
  • जब भी विनिर्देशन संकलित किया जाता है तो पैकेज निकाय की स्थिति 'अमान्य' हो जाती है। इसलिए, विनिर्देश के संकलन के बाद इसे हर बार फिर से तैयार करना होगा।
  • निजी तत्वों को पहले पैकेज बॉडी में उपयोग करने से पहले परिभाषित किया जाना चाहिए।
  • पैकेज का पहला भाग वैश्विक घोषणा हिस्सा है। इसमें चर, कर्सर और निजी तत्व (आगे की घोषणा) शामिल हैं जो पूरे पैकेज के लिए दिखाई देते हैं।
  • पैकेज का अंतिम भाग पैकेज आरंभीकरण भाग होता है जो सत्र में पहली बार किसी पैकेज को संदर्भित करने पर एक बार निष्पादित होता है।

वाक्य - विन्यास:

CREATE [OR REPLACE] PACKAGE BODY 
IS.END 
  • उपरोक्त सिंटैक्स पैकेज बॉडी के निर्माण को दर्शाता है।

अब हम यह देखने जा रहे हैं कि कार्यक्रम में पैकेज तत्वों को कैसे देखें।

पैकेज तत्वों का जिक्र

एक बार जब तत्वों को पैकेज में घोषित और परिभाषित किया जाता है, तो हमें उनका उपयोग करने के लिए तत्वों को संदर्भित करना होगा।

पैकेज के सभी सार्वजनिक तत्वों को पैकेज नाम से पुकारा जा सकता है, जिसके बाद तत्व नाम अलग हो सकता है अर्थात ' '।

पैकेज के सार्वजनिक चर का उपयोग उसी तरह से करने के लिए किया जा सकता है और उनसे मान प्राप्त करने के लिए '' ''।

PL / SQL में पैकेज बनाएँ

PL / SQL में जब भी किसी पैकेज को एक सत्र में संदर्भित / बुलाया जाता है, तो उस पैकेज के लिए एक नया उदाहरण बनाया जाएगा।

ओरेकल पैकेज तत्वों को इनिशियलाइज़ करने या 'पैकेज इनिशियलाइज़ेशन' के माध्यम से इस उदाहरण के निर्माण के समय कोई भी गतिविधि करने की सुविधा प्रदान करता है।

यह एक निष्पादन ब्लॉक के अलावा कुछ भी नहीं है जो सभी पैकेज तत्वों को परिभाषित करने के बाद पैकेज बॉडी में लिखा गया है। जब भी सत्र में पहली बार किसी पैकेज को संदर्भित किया जाएगा तो इस ब्लॉक को निष्पादित किया जाएगा।

वाक्य - विन्यास

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGINEEND 
  • उपरोक्त सिंटैक्स पैकेज बॉडी में पैकेज इनिशियलाइज़ेशन की परिभाषा को दर्शाता है।

आगे की घोषणा

पैकेज में आगे की घोषणा / संदर्भ कुछ भी नहीं है, बल्कि निजी तत्वों को अलग से घोषित करना और पैकेज बॉडी के बाद के हिस्से में इसे परिभाषित करना है।

निजी तत्वों को केवल तभी संदर्भित किया जा सकता है जब यह पैकेज बॉडी में पहले से ही घोषित हो। इस कारण से, आगे की घोषणा का उपयोग किया जाता है। लेकिन इसका उपयोग करना असामान्य है क्योंकि अधिकांश समय में निजी तत्वों को पैकेज बॉडी के पहले भाग में घोषित और परिभाषित किया जाता है।

फॉरवर्ड घोषणा ओरेकल द्वारा प्रदान किया गया एक विकल्प है, यह अनिवार्य नहीं है और उपयोग करना और उपयोग नहीं करना प्रोग्रामर की आवश्यकता पर निर्भर है।

वाक्य - विन्यास:

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGIN
;END 

उपरोक्त सिंटैक्स आगे की घोषणा को दर्शाता है। निजी तत्वों को पैकेज के अग्र भाग में अलग से घोषित किया जाता है, और उन्हें बाद के हिस्से में परिभाषित किया गया है।

पैकेज में कर्सर उपयोग

अन्य तत्वों के विपरीत किसी को पैकेज के अंदर कर्सर का उपयोग करने में सावधानी बरतने की आवश्यकता है।

यदि कर्सर पैकेज विनिर्देश में या पैकेज बॉडी के वैश्विक भाग में परिभाषित किया गया है, तो एक बार खोला गया कर्सर सत्र के अंत तक बना रहेगा।

तो किसी को हमेशा कर्सर विशेषताओं का उपयोग करना चाहिए '% ISOPEN' को संदर्भित करने से पहले कर्सर की स्थिति को सत्यापित करने के लिए।

अधिक भार

ओवरलोडिंग एक ही नाम के साथ कई उपप्रोग्राम होने की अवधारणा है। ये उपप्रोग्राम एक ही नाम के साथ कई मापदंडों या प्रकारों के मापदंडों या रिटर्न प्रकार यानी सबप्रोग्राम से अलग-अलग होंगे, लेकिन विभिन्न मापदंडों के साथ, विभिन्न प्रकार के पैरामीटर या अलग-अलग रीटाइप को ओवरलोडिंग माना जाता है।

यह उपयोगी है जब कई उपप्रोग्राम को एक ही कार्य करने की आवश्यकता होती है, लेकिन उनमें से प्रत्येक को कॉल करने का तरीका अलग होना चाहिए। इस स्थिति में, सबप्रोग्राम का नाम सभी के लिए समान रखा जाएगा और कॉलिंग स्टेटमेंट के अनुसार मापदंडों को बदल दिया जाएगा।

उदाहरण 1 : इस उदाहरण में, हम 'एंपायर' टेबल में कर्मचारी की जानकारी के मूल्यों को प्राप्त करने और सेट करने के लिए एक पैकेज बनाने जा रहे हैं। Get_record फ़ंक्शन दिए गए कर्मचारी नंबर के लिए रिकॉर्ड प्रकार का आउटपुट लौटाएगा, और set_record प्रक्रिया रिकॉर्ड प्रकार रिकॉर्ड को तालिका में सम्मिलित करेगी।

चरण 1) पैकेज विशिष्टता निर्माण

CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE set_record (p_emp_rec IN emp%ROWTYPE);FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE;END guru99_get_set:/

आउटपुट:

Package created

कोड स्पष्टीकरण

  • कोड लाइन 1-5 : एक प्रक्रिया और एक फ़ंक्शन के साथ गुरु99_get_set के लिए पैकेज विनिर्देश बनाना। ये दोनों अब इस पैकेज के सार्वजनिक तत्व हैं।

चरण 2) पैकेज में पैकेज बॉडी शामिल है, जहां सभी प्रक्रियाओं और कार्यों की वास्तविक परिभाषा को परिभाषित किया जाएगा। इस चरण में, पैकेज बॉडी बनाई जाती है।

CREATE OR REPLACE PACKAGE BODY guru99_get_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager);COMMIT;END set_record;FUNCTION get_record(p_emp_no IN NUMBER)RETURN emp%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN l_emp_rec;END get_record;BEGUN dbms_output.put_line(‘Control is now executing the package initialization part');END guru99_get_set:/

आउटपुट:

Package body created

कोड स्पष्टीकरण

  • कोड लाइन 7 : पैकेज बॉडी बनाना।
  • कोड लाइन 9-16 : विनिर्देश में घोषित तत्व 'set_record' को परिभाषित करना। यह पीएल / एसक्यूएल में स्टैंडअलोन प्रक्रिया को परिभाषित करने के समान है।
  • कोड लाइन 17-24: तत्व को परिभाषित करना 'get_record'। यह स्टैंडअलोन फ़ंक्शन को परिभाषित करने के समान है।
  • कोड लाइन 25-26: पैकेज आरंभीकरण भाग को परिभाषित करना।

चरण 3) उपरोक्त बनाए गए पैकेज का संदर्भ देकर अभिलेखों को सम्मिलित करने और प्रदर्शित करने के लिए एक अनाम ब्लॉक बनाना।

DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms output.put line(‘Insert new record for employee 1004');l_emp_rec.emp_no:=l004;l_emp_rec.emp_name:='CCC';l_emp_rec.salary~20000;l_emp_rec.manager:=’BBB’;guru99_get_set.set_record(1_emp_rec);dbms_output.put_line(‘Record inserted');dbms output.put line(‘Calling get function to display the inserted record'):l_get_rec:=guru99_get_set.get_record(1004);dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name);dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no);dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary');dbms output.put line(‘Employee manager:‘||1_get_rec.manager);END:/

आउटपुट:

Insert new record for employee 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB

कोड स्पष्टीकरण:

  • कोड लाइन 34-37: पैकेज के 'set_record' तत्व को कॉल करने के लिए एक अनाम ब्लॉक में रिकॉर्ड प्रकार चर के लिए डेटा को पॉप्युलेट करना।
  • कोड लाइन 38: कॉल गुरु99_get_set पैकेज के 'set_record' के लिए किया गया है। अब पैकेज त्वरित है और यह सत्र के अंत तक जारी रहेगा।
  • पैकेज आरंभीकरण भाग को निष्पादित किया जाता है क्योंकि यह पैकेज की पहली कॉल है।
  • तालिका में 'set_record' तत्व द्वारा डाला गया रिकॉर्ड।
  • कोड लाइन 41: सम्मिलित कर्मचारी के विवरण को प्रदर्शित करने के लिए 'get_record' तत्व को कॉल करना।
  • पैकेज के लिए 'get_record' कॉल के दौरान दूसरी बार पैकेज को संदर्भित किया जाता है। लेकिन आरंभीकरण भाग को इस बार निष्पादित नहीं किया गया है क्योंकि पैकेज इस सत्र में पहले से ही आरंभिक है।
  • कोड लाइन 42-45: कर्मचारी विवरण मुद्रित करना।

पैकेज में निर्भरता

चूंकि पैकेज संबंधित चीजों का तार्किक समूह है, इसलिए इसमें कुछ निर्भरताएं हैं। निम्नलिखित निर्भरता है कि देखभाल की जानी है।

  • एक विशिष्टता एक स्टैंडअलोन ऑब्जेक्ट है।
  • पैकेज बॉडी स्पेसिफिकेशन पर निर्भर है।
  • पैकेज बॉडी को अलग से संकलित किया जा सकता है। जब भी विनिर्देश संकलित किया जाता है, तो शरीर को फिर से तैयार करने की आवश्यकता होती है क्योंकि यह अमान्य हो जाएगा।
  • पैकेज बॉडी में उपप्रोग्राम जो एक निजी तत्व पर निर्भर है, को निजी तत्व घोषणा के बाद ही परिभाषित किया जाना चाहिए।
  • पैकेज और संकलन के समय विनिर्देशन और निकाय में संदर्भित डेटाबेस ऑब्जेक्ट को मान्य स्थिति में होना चाहिए।

पैकेज की जानकारी

एक बार पैकेज की जानकारी बनने के बाद, पैकेज की जानकारी जैसे पैकेज सोर्स, सबप्रोग्राम विवरण और ओवरलोड विवरण ओरेकल डेटा डेफिनिशन टेबल में उपलब्ध हैं।

नीचे दी गई तालिका डेटा परिभाषा तालिका और तालिका में उपलब्ध पैकेज जानकारी देती है।

तालिका नाम विवरण सवाल
ALL_OBJECT पैकेज का विवरण जैसे object_id, creation_date, last_ddl_time, आदि। यह सभी उपयोगकर्ताओं द्वारा बनाई गई वस्तुओं को समाहित करेगा। चयन करें * all_objects से जहां object_name = ' '
USER_OBJECT पैकेज का विवरण जैसे object_id, creation_date, last_ddl_time, आदि। यह वर्तमान उपयोगकर्ता द्वारा बनाई गई वस्तुओं को समाहित करेगा। चयन करें * user_objects से जहां object_name = ' '
ALL_SOURCE सभी उपयोगकर्ताओं द्वारा बनाई गई वस्तुओं का स्रोत देता है। चयन करें * all_source से जहाँ नाम = ' '
USER_SOURCE वर्तमान उपयोगकर्ता द्वारा बनाई गई वस्तुओं का स्रोत देता है। चयन करें * उपयोगकर्ता_स्रोत से जहां नाम = ' '
ALL_PROCEDURES सभी उपयोगकर्ताओं द्वारा बनाई गई ऑब्जेक्ट_आईडी, अधिभार विवरण आदि जैसे उपप्रोग्राम विवरण देता है। सेलेक्ट * F_ all_procedures जहाँ object_name = ' '
USER_PROCEDURES वर्तमान उपयोगकर्ता द्वारा बनाए गए सबप्रोग्राम विवरण जैसे ऑब्जेक्ट_आईडी, अधिभार विवरण आदि देता है। चयन करें * user_procedures से जहां object_name = ' '

UTL फ़ाइल - एक अवलोकन

UTL फ़ाइल विशेष कार्यों को करने के लिए Oracle द्वारा प्रदान किया गया अलग उपयोगिता पैकेज है। यह मुख्य रूप से PL / SQL संकुल या उपप्रोग्राम से ऑपरेटिंग सिस्टम फ़ाइलों को पढ़ने और लिखने के लिए उपयोग किया जाता है। यह जानकारी डालने और फ़ाइलों से जानकारी प्राप्त करने के लिए अलग-अलग कार्य करता है। यह मूल चरित्र सेट में पढ़ने / लिखने की अनुमति भी देता है।

प्रोग्रामर इसका उपयोग किसी भी प्रकार की ऑपरेटिंग सिस्टम फ़ाइलों को लिखने के लिए कर सकता है और फ़ाइल सीधे डेटाबेस सर्वर पर लिखी जाएगी। नाम और निर्देशिका पथ का उल्लेख समय लेखन में किया जाएगा।

सारांश

हमने अब PL / SQL में संकुल सीख लिया है, और आपको अब निम्नलिखित में काम करने में सक्षम होना चाहिए।

  • PL / SQL पैकेज और उसके घटक
  • पैकेज के लक्षण
  • पैकेज तत्वों का जिक्र और ओवरलोडिंग
  • संकुल में निर्भरता का प्रबंधन
  • पैकेज की जानकारी देखना
  • UTL फ़ाइल क्या है