Oracle PL/SQL ऑब्जेक्ट प्रकार: उदाहरणों सहित CREATE TYPE
⚡ स्मार्ट सारांश
PL/SQL में ऑब्जेक्ट प्रकार ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को संभव बनाते हैं। Oracleये आपको विशेषताओं और विधियों के साथ वास्तविक दुनिया की संस्थाओं को मॉडल करने की सुविधा देते हैं। ये कंस्ट्रक्टर, इनहेरिटेंस और समानता तुलना का समर्थन करते हैं, इसलिए एक ही स्कीमा-स्तरीय प्रकार संरचित डेटा को संग्रहीत और संसाधित कर सकता है।

PL/SQL में ऑब्जेक्ट प्रकार क्या है?
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग विशेष रूप से पुन: प्रयोज्य घटकों और जटिल अनुप्रयोगों के निर्माण के लिए उपयुक्त है। प्रोग्राम "क्रियाओं" के बजाय "ऑब्जेक्ट्स" के इर्द-गिर्द व्यवस्थित होते हैं; यानी, वे किसी एक क्रिया के बजाय संपूर्ण ऑब्जेक्ट के साथ काम करने और परस्पर क्रिया करने के लिए डिज़ाइन किए जाते हैं। यह दृष्टिकोण प्रोग्रामर को ऑब्जेक्ट-एंटिटी स्तर पर विवरणों को भरने और उनमें हेरफेर करने की सुविधा देता है।
नीचे दी गई तस्वीर में एक ऑब्जेक्ट प्रकार का उदाहरण दिखाया गया है जिसमें बैंक खाते को एक ऑब्जेक्ट इकाई के रूप में माना गया है। ऑब्जेक्ट एट्रिब्यूट्स में मान होते हैं - बैंक खाते के लिए ये खाता संख्या, बैंक बैलेंस इत्यादि हैं - जबकि ऑब्जेक्ट मेथड्स ब्याज दर की गणना करना या बैंक स्टेटमेंट तैयार करना जैसी क्रियाओं का वर्णन करते हैं, जिनमें से प्रत्येक को पूरा करने के लिए एक प्रक्रिया की आवश्यकता होती है।
In PL / SQLऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ऑब्जेक्ट प्रकारों पर आधारित है। एक ऑब्जेक्ट प्रकार किसी भी वास्तविक दुनिया की इकाई का प्रतिनिधित्व कर सकता है। नीचे दिए गए अनुभाग ऑब्जेक्ट प्रकारों, उनके घटकों और उन्हें बनाने और उपयोग करने के तरीके के बारे में बताते हैं।
ऑब्जेक्ट प्रकार के घटक
एक PL/SQL ऑब्जेक्ट प्रकार में मुख्य रूप से दो घटक होते हैं।
- गुण
- सदस्य/विधि
गुण
एट्रिब्यूट वे कॉलम या फ़ील्ड होते हैं जिनमें डेटा संग्रहित होता है। प्रत्येक एट्रिब्यूट को उस डेटाटाइप से मैप किया जाता है जो उस एट्रिब्यूट के लिए प्रोसेसिंग और स्टोरेज प्रकार को परिभाषित करता है। एक एट्रिब्यूट किसी भी मान्य प्रकार का हो सकता है। PL/SQL डेटाटाइप, या यह किसी अन्य ऑब्जेक्ट प्रकार का हो सकता है.
सदस्य/विधि
सदस्य, या विधियाँ, हैं उपकार्यक्रम ऑब्जेक्ट टाइप के अंदर परिभाषित किए गए ये सदस्य डेटा को स्टोर करने के लिए उपयोग नहीं किए जाते हैं; बल्कि, ये ऑब्जेक्ट टाइप के अंदर की जाने वाली प्रोसेसिंग को परिभाषित करते हैं — उदाहरण के लिए, ऑब्जेक्ट में डेटा भरने से पहले उसका सत्यापन करना। इन्हें ऑब्जेक्ट टाइप स्पेसिफिकेशन में घोषित किया जाता है और ऑब्जेक्ट टाइप बॉडी में परिभाषित किया जाता है। बॉडी वैकल्पिक है: यदि कोई सदस्य मौजूद नहीं है, तो ऑब्जेक्ट टाइप का कोई बॉडी पार्ट नहीं होता है।
इसमें ऑब्जेक्ट बनाएं Oracle
ऑब्जेक्ट टाइप को सबप्रोग्राम स्तर पर नहीं बनाया जा सकता; इसे केवल स्कीमा स्तर पर ही बनाया जा सकता है। स्कीमा में ऑब्जेक्ट टाइप परिभाषित हो जाने के बाद, इसे सबप्रोग्राम में उपयोग किया जा सकता है। ऑब्जेक्ट टाइप को "CREATE TYPE" स्टेटमेंट का उपयोग करके बनाया जाता है, और टाइप बॉडी को इसके ऑब्जेक्ट टाइप के अस्तित्व में आने के बाद ही बनाया जा सकता है।
नीचे दिए गए स्क्रीनशॉट ऑब्जेक्ट विनिर्देश के लिए CREATE TYPE सिंटैक्स और इसके तरीकों को परिभाषित करने वाले CREATE TYPE BODY सिंटैक्स को दर्शाते हैं।
CREATE TYPE<object_type_name> AS OBJECT ( <attribute_l><datatype>, . . ); / CREATE TYPE BODY<object_type_name> AS OBJECT ( MEMBER[PROCEDURE|FUNCTION]<member_name> IS <declarative section> BEGIN <execution part> END; . . ); /
वाक्यविन्यास स्पष्टीकरण:
- ऊपर दिया गया सिंटैक्स एट्रिब्यूट्स वाले एक ऑब्जेक्ट और मेथड्स वाले एक ऑब्जेक्ट बॉडी के निर्माण को दर्शाता है।
- विधियों को ऑब्जेक्ट बॉडी में ओवरलोड भी किया जा सकता है।
ऑब्जेक्ट प्रकार की घोषणा आरंभीकरण
PL/SQL के अन्य घटकों की तरह, ऑब्जेक्ट प्रकारों को प्रोग्राम में उपयोग करने से पहले घोषित करना आवश्यक है। ऑब्जेक्ट प्रकार बन जाने के बाद, इसका उपयोग किसी सबप्रोग्राम के डिक्लेरेटिव सेक्शन में उस ऑब्जेक्ट प्रकार के वेरिएबल को घोषित करने के लिए किया जा सकता है।
जब भी किसी वेरिएबल को ऑब्जेक्ट टाइप के रूप में घोषित किया जाता है, तो रनटाइम पर उस ऑब्जेक्ट टाइप का एक नया इंस्टेंस बनाया जाता है, और इस नए बनाए गए इंस्टेंस को वेरिएबल के नाम से संदर्भित किया जाता है। इस प्रकार, एक ही ऑब्जेक्ट टाइप विभिन्न इंस्टेंस के अंतर्गत कई मानों को संग्रहीत कर सकता है।
नीचे दिया गया स्क्रीनशॉट एक वेरिएबल को ऑब्जेक्ट प्रकार के रूप में घोषित किए जाने को दर्शाता है। PL/SQL ब्लॉक.
DECLARE <variable_name> <object_type_name>; BEGIN . . END; /
वाक्यविन्यास स्पष्टीकरण:
- ऊपर दिया गया सिंटैक्स एक घोषणा को दर्शाता है। परिवर्तनशील घोषणात्मक अनुभाग में एक ऑब्जेक्ट प्रकार के रूप में।
एक बार जब किसी सबप्रोग्राम में वेरिएबल को ऑब्जेक्ट प्रकार के रूप में घोषित कर दिया जाता है, तो वह एटॉमिक रूप से नल होता है—पूरा ऑब्जेक्ट ही नल होता है। प्रोग्राम में उपयोग करने से पहले इसे मानों से इनिशियलाइज़ करना आवश्यक है। ऑब्जेक्ट को कंस्ट्रक्टर का उपयोग करके इनिशियलाइज़ किया जाता है।
कंस्ट्रक्टर किसी ऑब्जेक्ट का अंतर्निहित मेथड होता है जिसे ऑब्जेक्ट टाइप के समान नाम से संदर्भित किया जा सकता है। नीचे दिया गया स्क्रीनशॉट ऑब्जेक्ट टाइप इंस्टेंस के आरंभीकरण को दर्शाता है।
DECLARE <variable_name> <object_type_name>; BEGIN <variable_name>:=<object_type_name>(); END; /
वाक्यविन्यास स्पष्टीकरण:
- ऊपर दिया गया सिंटैक्स ऑब्जेक्ट टाइप इंस्टेंस को नल वैल्यू से इनिशियलाइज़ करने को दर्शाता है।
- ऑब्जेक्ट स्वयं इनिशियलाइज़ होने के बाद नल नहीं रहता है, लेकिन ऑब्जेक्ट के अंदर के एट्रिब्यूट तब तक नल रहते हैं जब तक उन्हें मान असाइन नहीं किए जाते हैं।
कंस्ट्रक्टर्स
कंस्ट्रक्टर किसी ऑब्जेक्ट का वह अंतर्निहित मेथड होता है जिसे ऑब्जेक्ट टाइप के समान नाम से संदर्भित किया जा सकता है। जब भी ऑब्जेक्ट को पहली बार संदर्भित किया जाता है, तो यह कंस्ट्रक्टर स्वतः ही कॉल हो जाता है।
आप इन कंस्ट्रक्टरों का उपयोग करके ऑब्जेक्ट को इनिशियलाइज़ भी कर सकते हैं। ऑब्जेक्ट टाइप बॉडी में ऑब्जेक्ट टाइप के समान नाम वाला एक मेंबर परिभाषित करके कंस्ट्रक्टर को स्पष्ट रूप से परिभाषित किया जा सकता है।
उदाहरण 1: निम्नलिखित उदाहरण में, हम ऑब्जेक्ट टाइप मेंबर का उपयोग करके ('RRR', 1005, 20000, 1000) और ('PPP', 1006, 20000, 1001) मानों के साथ emp टेबल में रिकॉर्ड सम्मिलित करते हैं। डेटा सम्मिलित होने के बाद, हम ऑब्जेक्ट टाइप मेंबर का उपयोग करके इसे प्रदर्शित करते हैं। हम दूसरे रिकॉर्ड के लिए मैनेजर आईडी को डिफ़ॉल्ट मान 1001 से भरने के लिए एक स्पष्ट कंस्ट्रक्टर का भी उपयोग करते हैं।
हम इसे निम्नलिखित चरणों में क्रियान्वित करते हैं।
- चरण 1: ऑब्जेक्ट प्रकार और ऑब्जेक्ट प्रकार का बॉडी बनाएं।
- चरण 2: emp_no 1005 के लिए अंतर्निहित कंस्ट्रक्टर के माध्यम से ऑब्जेक्ट प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाएं।
- चरण 3: emp_no 1006 के लिए स्पष्ट कंस्ट्रक्टर के माध्यम से ऑब्जेक्ट प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाएं।
चरण 1) ऑब्जेक्ट प्रकार और ऑब्जेक्ट प्रकार बॉडी बनाएं।
नीचे दिए गए स्क्रीनशॉट में emp_object ऑब्जेक्ट प्रकार विनिर्देश को उसके एट्रिब्यूट और सदस्यों के साथ बनाते हुए दिखाया गया है।
CREATE TYPE emp_object AS OBJECT( emp_no NUMBER, emp_name VARCHAR2(50), salary NUMBER, manager NUMBER, CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2, p_salary NUMBER) RETURN SELF AS RESULT), MEMBER PROCEDURE insert_records, MEMBER PROCEDURE display_records); /
नीचे दिए गए स्क्रीनशॉट में स्पष्ट कंस्ट्रक्टर और सदस्य प्रक्रियाओं के साथ emp_object प्रकार के बॉडी का निर्माण दिखाया गया है।
CREATE OR REPLACE TYPE BODY emp_object AS CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2, p_salary NUMBER) RETURN SELF AS RESULT IS BEGIN Dbms_output.put_line('Constructor fired..'); SELF.emp_no:=p_emp_no; SELF.emp_name:=p_emp_name; SELF.salary:=p_salary; SELF.manager:=1001; RETURN; END; MEMBER PROCEDURE insert_records IS BEGIN INSERT INTO emp VALUES(emp_no,emp_name,salary,manager); END; MEMBER PROCEDURE display_records IS BEGIN Dbms_output.put_line('Employee Name:'||emp_name); Dbms_output.put_line('Employee Number:'||emp_no); Dbms_output.put_line('Salary:'||salary); Dbms_output.put_line('Manager:'||manager); END; END; /
Code व्याख्या
- Code पंक्ति 1-9: 'emp_object' ऑब्जेक्ट प्रकार बनाया जा रहा है जिसमें 4 विशेषताएँ और 3 सदस्य हैं। इसमें केवल 3 मापदंडों वाले एक कंस्ट्रक्टर की परिभाषा शामिल है। (वास्तविक अंतर्निहित कंस्ट्रक्टर में ऑब्जेक्ट प्रकार में मौजूद विशेषताओं की संख्या के बराबर मापदंड होते हैं।)
- Code पंक्ति 10: टाइप बॉडी का निर्माण करना।
- Code पंक्ति 11-21: स्पष्ट कंस्ट्रक्टर को परिभाषित करना। पैरामीटर मानों को एट्रिब्यूट्स को असाइन करना और एट्रिब्यूट 'मैनेजर' को डिफ़ॉल्ट मान '1001' असाइन करना।
- Code पंक्ति 22-26: 'insert_records' नामक सदस्य को परिभाषित करना, जिसमें विशेषता मानों को 'emp' तालिका में सम्मिलित किया जाता है।
- Code पंक्ति 27-34: 'display_records' नामक सदस्य को परिभाषित करना, जो ऑब्जेक्ट प्रकार के एट्रिब्यूट के मानों को प्रदर्शित करता है।
आउटपुट:
प्रकार बनाया गया
प्रकार बॉडी बनाई गई
चरण 2) emp_no 1005 के लिए अंतर्निहित कंस्ट्रक्टर के माध्यम से निर्मित ऑब्जेक्ट प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाना।
नीचे दिया गया स्क्रीनशॉट उस अनाम ब्लॉक को दर्शाता है जो इम्प्लिसिट कंस्ट्रक्टर के माध्यम से emp_object को कॉल करता है।
DECLARE guru_emp_det emp_object; BEGIN guru_emp_det:=emp_object(1005,'RRR',20000,1000); guru_emp_det.display_records; guru_emp_det.insert_records; COMMIT; END;
Code व्याख्या
- Code पंक्ति 37-45: इम्प्लिसिट कंस्ट्रक्टर का उपयोग करके रिकॉर्ड सम्मिलित किए जा रहे हैं। कंस्ट्रक्टर को किए गए कॉल में एट्रिब्यूट मानों की वास्तविक संख्या शामिल होती है।
- Code पंक्ति 38: 'guru_emp_det' को 'emp_object' ऑब्जेक्ट प्रकार के रूप में घोषित करता है।
- Code पंक्ति 41: 'guru_emp_det.display_records' स्टेटमेंट 'display_records' मेंबर को कॉल करता है और एट्रिब्यूट वैल्यू प्रदर्शित होती हैं।
- Code पंक्ति 42: 'guru_emp_det.insert_records' स्टेटमेंट 'insert_records' मेंबर को कॉल करता है और एट्रिब्यूट वैल्यू टेबल में इंसर्ट हो जाती हैं। इसके बाद ब्लॉक कमिट हो जाता है। ट्रांजेक्शन.
आउटपुट:
कर्मचारी का नाम: आरआरआर
कर्मचारी संख्या: 1005
वेतन : 20000
प्रबंधक : 1000
चरण 3) emp_no 1006 के लिए स्पष्ट कंस्ट्रक्टर के माध्यम से निर्मित ऑब्जेक्ट प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाना।
नीचे दिया गया स्क्रीनशॉट उस अनाम ब्लॉक को दर्शाता है जो तीन आर्गुमेंट के साथ स्पष्ट कंस्ट्रक्टर के माध्यम से emp_object को कॉल करता है।
DECLARE guru_emp_det emp_object; BEGIN guru_emp_det:=emp_object(1006,'PPP',20000); guru_emp_det.display_records; guru_emp_det.insert_records; COMMIT; END; /
उत्पादन
Employee Name:PPP Employee Number:1006 Salary:20000 Manager:1001
Code स्पष्टीकरण:
- Code पंक्ति 46-53: स्पष्ट कंस्ट्रक्टर का उपयोग करके रिकॉर्ड सम्मिलित करना।
- Code पंक्ति 46: 'guru_emp_det' को 'emp_object' ऑब्जेक्ट प्रकार के रूप में घोषित करता है।
- Code पंक्ति 50: 'guru_emp_det.display_records' स्टेटमेंट 'display_records' मेंबर को कॉल करता है और एट्रिब्यूट वैल्यू प्रदर्शित होती हैं।
- Code पंक्ति 51: 'guru_emp_det.insert_records' स्टेटमेंट 'insert_records' मेंबर को कॉल करता है और एट्रिब्यूट वैल्यू टेबल में इंसर्ट हो जाती हैं। चूंकि केवल तीन आर्गुमेंट पास किए जाते हैं, इसलिए एक्सप्लिसिट कंस्ट्रक्टर मैनेजर आईडी को उसके डिफ़ॉल्ट मान 1001 पर सेट कर देता है।
ऑब्जेक्ट प्रकार में वंशानुक्रम
इनहेरिटेंस प्रॉपर्टी एक सब-ऑब्जेक्ट टाइप को सुपर ऑब्जेक्ट टाइप या पैरेंट ऑब्जेक्ट टाइप के सभी एट्रीब्यूट्स और मेंबर्स तक पहुंचने की अनुमति देती है।
सब-ऑब्जेक्ट प्रकार को इनहेरिटेड ऑब्जेक्ट प्रकार कहा जाता है, और सुपर ऑब्जेक्ट प्रकार को पैरेंट ऑब्जेक्ट प्रकार कहा जाता है। नीचे दिया गया सिंटैक्स पैरेंट और इनहेरिटेड ऑब्जेक्ट प्रकार बनाने का तरीका दर्शाता है। नीचे दिए गए स्क्रीनशॉट में पैरेंट (सुपर) प्रकार का सिंटैक्स दिखाया गया है जिसे 'नॉट फाइनल' के रूप में चिह्नित किया गया है।
CREATE TYPE <object_type_name_parent> AS OBJECT ( <attribute_l><datatype>, . . )NOT FINAL; /
वाक्यविन्यास स्पष्टीकरण:
- ऊपर दिया गया सिंटैक्स SUPER टाइप के निर्माण को दर्शाता है। NOT FINAL क्लॉज़ टाइप को इनहेरिट करने की अनुमति देता है।
नीचे दिया गया स्क्रीनशॉट UNDER कीवर्ड का उपयोग करके बनाए गए इनहेरिटेड (SUB) प्रकार के सिंटैक्स को दर्शाता है।
CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent> ( <attribute_l><datatype>, . ); /
वाक्यविन्यास स्पष्टीकरण:
- ऊपर दिया गया सिंटैक्स SUB प्रकार के निर्माण को दर्शाता है। इसमें पैरेंट ऑब्जेक्ट प्रकार के सभी सदस्य और विशेषताएँ शामिल हैं।
उदाहरण 1: नीचे दिए गए उदाहरण में, हम रिकॉर्ड ('RRR', 1007, 20000) के लिए प्रबंधक आईडी '1002' के साथ एक रिकॉर्ड सम्मिलित करने के लिए इनहेरिटेंस प्रॉपर्टी का उपयोग करते हैं। हम निम्नलिखित चरणों में प्रोग्राम को निष्पादित करते हैं।
- चरण 1: सुपर टाइप बनाएं।
- चरण 2: SUB प्रकार और बॉडी बनाएं।
- चरण 3: SUB प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाएं।
चरण 1) सुपर टाइप या पैरेंट टाइप बनाएं।
नीचे दिए गए स्क्रीनशॉट में NOT FINAL क्लॉज़ के साथ emp_object सुपर टाइप को बनाते हुए दिखाया गया है।
CREATE TYPE emp_object AS OBJECT( emp_no NUMBER, emp_name VARCHAR2(50), salary NUMBER, manager NUMBER, CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50), p_salary NUMBER)RETURN SELF AS RESULT), MEMBER PROCEDURE insert_records, MEMBER PROCEDURE display_records)NOT FINAL; /
Code स्पष्टीकरण:
- Code पंक्ति 1-9: 'emp_object' ऑब्जेक्ट प्रकार बनाया जा रहा है जिसमें 4 विशेषताएँ और 3 सदस्य हैं। इसमें केवल 3 मापदंडों वाले एक कंस्ट्रक्टर की परिभाषा शामिल है। इसे 'NOT FINAL' घोषित किया गया है, इसलिए यह एक पैरेंट प्रकार है।
चरण 2) सुपर टाइप के अंतर्गत सब टाइप बनाएं।
नीचे दिए गए स्क्रीनशॉट में सब_एम्प_ऑब्जेक्ट इनहेरिटेड टाइप और उसके बॉडी के निर्माण को दिखाया गया है।
CREATE OR REPLACE TYPE sub_emp_object UNDER emp_object (default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr); / CREATE OR REPLACE TYPE BODY sub_emp_object AS MEMBER PROCEDURE insert_default_mgr IS BEGIN INSERT INTO emp VALUES(emp_no,emp_name,salary,manager); END; END; /
Code स्पष्टीकरण:
- Code पंक्ति 10-13: 'sub_emp_object' को एक अतिरिक्त विशेषता 'default_manager' और एक सदस्य प्रक्रिया घोषणा के साथ विरासत में मिले प्रकार के रूप में बनाया जा रहा है।
- Code पंक्ति 14: इनहेरिटेड ऑब्जेक्ट टाइप के लिए बॉडी बनाना।
- Code पंक्ति 16-21: यह सदस्य प्रक्रिया 'emp' तालिका में SUPER ऑब्जेक्ट प्रकार के मानों के साथ रिकॉर्ड सम्मिलित करती है, सिवाय प्रबंधक मान के। प्रबंधक मान के लिए, यह SUB प्रकार से 'default_manager' का उपयोग करती है।
चरण 3) SUB प्रकार को कॉल करने के लिए अनाम ब्लॉक बनाना।
नीचे दिया गया स्क्रीनशॉट उस अनाम ब्लॉक को दर्शाता है जो SUB प्रकार को कॉल करता है और डिफ़ॉल्ट प्रबंधक आईडी सम्मिलित करता है।
DECLARE guru_emp_det sub_emp_object; BEGIN guru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002); guru_emp_det.insert_default_mgr; COMMIT; END; /
Code स्पष्टीकरण:
- Code पंक्ति 25: 'guru_emp_det' को 'sub_emp_object' प्रकार के रूप में घोषित करना।
- Code पंक्ति 27: ऑब्जेक्ट को इम्प्लिसिट कंस्ट्रक्टर से इनिशियलाइज़ किया जा रहा है। इस कंस्ट्रक्टर में 5 पैरामीटर हैं (पैरेंट टाइप के 4 एट्रीब्यूट और सब टाइप का 1 एट्रीब्यूट)। अंतिम पैरामीटर (1002) default_manager एट्रीब्यूट के लिए मान निर्धारित करता है।
- Code पंक्ति 28: कंस्ट्रक्टर में पास किए गए डिफ़ॉल्ट मैनेजर आईडी के साथ रिकॉर्ड डालने के लिए 'insert_default_mgr' सदस्य को कॉल करना।
PL/SQL ऑब्जेक्ट्स की समानता
एक ही ऑब्जेक्ट प्रकार से संबंधित ऑब्जेक्ट इंस्टेंस की समानता की तुलना की जा सकती है। ऐसा करने के लिए, ऑब्जेक्ट प्रकार को ORDER नामक एक विशेष विधि की आवश्यकता होती है।
यह ORDER विधि एक फ़ंक्शन होनी चाहिए जो संख्यात्मक प्रकार का मान लौटाती है। यह इनपुट के रूप में दो पैरामीटर लेती है (पहला पैरामीटर: स्वयं ऑब्जेक्ट इंस्टेंस की आईडी; दूसरा पैरामीटर: किसी अन्य ऑब्जेक्ट इंस्टेंस की आईडी)।
दो ऑब्जेक्ट इंस्टेंस की आईडी की तुलना की जाती है, और परिणाम एक संख्या के रूप में लौटाया जाता है।
- एक धनात्मक मान यह दर्शाता है कि SELF ऑब्जेक्ट इंस्टेंस दूसरे इंस्टेंस से बड़ा है।
- ऋणात्मक मान यह दर्शाता है कि SELF ऑब्जेक्ट इंस्टेंस अन्य इंस्टेंस से छोटा है।
- शून्य यह दर्शाता है कि SELF ऑब्जेक्ट इंस्टेंस दूसरे इंस्टेंस के बराबर है।
- यदि दोनों में से कोई भी इंस्टेंस null है, तो फ़ंक्शन null लौटाता है।
नीचे दिया गया स्क्रीनशॉट ORDER सदस्य फ़ंक्शन के सिंटैक्स को दर्शाता है जिसे समानता जांच के लिए टाइप बॉडी में शामिल किया जाना चाहिए।
CREATE TYPE BODY<object_type_name_ 1>AS OBJECT ( ORDER MEMBER FUNCTION match(<parameter> object_type_name_ 1) RETURN INTEGER IS BEGIN IF <attribute_name>parameter <attribute_name>THEN RETURN -1; --any negative number will do ELSIF id>c.id THEN RETURN 1; --any positive number will do ELSE RETURN 0; END IF; END; . . ); /
वाक्यविन्यास स्पष्टीकरण:
- ऊपर दिया गया सिंटैक्स ORDER फ़ंक्शन को दर्शाता है जिसे समानता की जांच के लिए टाइप बॉडी में शामिल किया जाना चाहिए।
- इस फ़ंक्शन के लिए पैरामीटर समान ऑब्जेक्ट प्रकार का एक उदाहरण होना चाहिए।
- इस फ़ंक्शन को “obj_instance_1.match(obj_instance_2)” के रूप में कॉल किया जा सकता है, और यह अभिव्यक्ति दिखाया गया संख्यात्मक मान लौटाती है, जहाँ obj_instance_1 और obj_instance_2 ऑब्जेक्ट प्रकार के इंस्टेंस हैं।
उदाहरण 1: निम्नलिखित उदाहरण में, हम दो ऑब्जेक्ट की तुलना करते हैं। हम दो इंस्टेंस बनाते हैं और उनके बीच 'वेतन' विशेषता की तुलना करते हैं। हम यह दो चरणों में करते हैं।
- चरण 1: ऑब्जेक्ट प्रकार और बॉडी बनाएं।
- चरण 2: ऑब्जेक्ट इंस्टेंस की तुलना करने के लिए अनाम ब्लॉक बनाएं।
चरण 1) ऑब्जेक्ट प्रकार और बॉडी बनाना।
नीचे दिए गए स्क्रीनशॉट emp_object_equality विनिर्देश और उसके बॉडी को दिखाते हैं, जो ORDER फ़ंक्शन को परिभाषित करता है जो वेतन विशेषता की तुलना करता है।
CREATE TYPE emp_object_equality AS OBJECT( salary NUMBER, ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER); /
CREATE TYPE BODY emp_object_equality AS ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER IS BEGIN IF salary<c.salary THEN RETURN -1; ELSIF salary>c.salary THEN RETURN 1; ELSE RETURN 0; END IF; END; END; /
Code स्पष्टीकरण:
- Code पंक्ति 1-4: 'emp_object_equality' ऑब्जेक्ट प्रकार को 1 विशेषता और 1 सदस्य के साथ बनाया जा रहा है।
- Code पंक्ति 6-16: ORDER फ़ंक्शन को परिभाषित करना जो SELF इंस्टेंस और पैरामीटर इंस्टेंस के 'वेतन' विशेषता की तुलना करता है। यह SELF वेतन कम होने पर ऋणात्मक मान, SELF वेतन अधिक होने पर धनात्मक मान और वेतन बराबर होने पर 0 लौटाता है।
Code आउटपुट:
प्रकार बनाया गया
चरण 2) ऑब्जेक्ट इंस्टेंस की तुलना करने के लिए अनाम ब्लॉक बनाना।
नीचे दिया गया स्क्रीनशॉट उस अनाम ब्लॉक को दर्शाता है जो वेतन के आधार पर दो emp_object_equality इंस्टेंस की तुलना करता है।
DECLARE l_obj_1 emp_object_equality; l_obj_2 emp_object_equality; BEGIN l_obj_1:=emp_object_equality(15000); l_obj_2:=emp_object_equality(17000); IF l_obj_1.equals(l_obj_2)>0 THEN Dbms_output.put_line('Salary of first instance is greater'); ELSIF l_obj_1.equals(l_obj_2)<0 THEN Dbms_output.put_line('Salary of second instance is greater'); ELSE Dbms_output.put_line('Salaries are equal'); END IF; END; /
उत्पादन
Salary of second instance is greater
Code स्पष्टीकरण:
- Code पंक्ति 20: 'emp_object_equality' प्रकार के 'l_obj_1' की घोषणा करना।
- Code पंक्ति 21: 'emp_object_equality' प्रकार के 'l_obj_2' की घोषणा करना।
- Code पंक्ति 23: 'l_obj_1' को वेतन मान '15000' से प्रारंभ किया जा रहा है।
- Code पंक्ति 24: 'l_obj_2' को वेतन मान '17000' से प्रारंभ किया जा रहा है।
- Code पंक्ति 25-33: ORDER फ़ंक्शन द्वारा लौटाए गए नंबर के आधार पर संदेश प्रिंट करना।


















