Oracle PL/SQL ऑब्जेक्ट प्रकार ट्यूटोरियल उदाहरणों के साथ

PL/SQL में ऑब्जेक्ट प्रकार क्या है?

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग विशेष रूप से पुन: प्रयोज्य घटकों और जटिल अनुप्रयोगों के निर्माण के लिए उपयुक्त है। उन्हें “क्रियाओं” के बजाय “ऑब्जेक्ट्स” के इर्द-गिर्द व्यवस्थित किया जाता है, यानी प्रोग्राम को एकल क्रिया के बजाय संपूर्ण ऑब्जेक्ट के साथ काम करने और बातचीत करने के लिए डिज़ाइन किया गया है। यह अवधारणा प्रोग्रामर को ऑब्जेक्ट एंटिटी स्तर पर विवरणों को पॉप्युलेट और हेरफेर करने की अनुमति देती है।

नीचे दी गई तस्वीर ऑब्जेक्ट प्रकार का एक उदाहरण दर्शाती है जिसमें बैंक खाते को ऑब्जेक्ट इकाई माना जाता है। ऑब्जेक्ट विशेषताओं में वे चीजें शामिल हैं जो कुछ विशेषता मान रखती हैं, उदाहरण के लिए बैंक खाते में; यह खाता संख्या, बैंक बैलेंस आदि है जबकि ऑब्जेक्ट विधियाँ ब्याज दर की गणना, बैंक स्टेटमेंट बनाने आदि जैसी चीजों का वर्णन करती हैं जिसके लिए कुछ प्रक्रिया पूरी करने की आवश्यकता होती है।

PL/SQL में ऑब्जेक्ट प्रकार

PL/SQL में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग ऑब्जेक्ट प्रकारों पर आधारित होती है।

ऑब्जेक्ट प्रकार किसी भी वास्तविक दुनिया इकाई का प्रतिनिधित्व कर सकता है। हम इस अध्याय में और अधिक ऑब्जेक्ट प्रकारों पर चर्चा करने जा रहे हैं।

ऑब्जेक्ट प्रकार के घटक

PL / SQL ऑब्जेक्ट प्रकार में मुख्य रूप से दो घटक होते हैं।

  1. गुण
  2. सदस्य/विधि

गुण

विशेषताएँ वह कॉलम या फ़ील्ड होती हैं जिसमें डेटा संग्रहीत किया जाता है। प्रत्येक विशेषता को उस डेटाटाइप से मैप किया जाएगा जो उस विशेषता के लिए प्रोसेसिंग और स्टोरेज प्रकार को परिभाषित करता है। विशेषता किसी भी मान्य प्रकार की हो सकती है PL/SQL डेटाटाइप, या यह किसी अन्य ऑब्जेक्ट प्रकार का हो सकता है.

सदस्य/विधि

सदस्य या विधियाँ उपप्रोग्राम हैं जिन्हें ऑब्जेक्ट प्रकार में परिभाषित किया जाता है। इनका उपयोग किसी भी डेटा को संग्रहीत करने के लिए नहीं किया जाता है। इनका उपयोग मुख्य रूप से ऑब्जेक्ट प्रकार के अंदर प्रक्रिया को परिभाषित करने के लिए किया जाता है। उदाहरण के लिए ऑब्जेक्ट प्रकार को पॉपुलेट करने से पहले डेटा को मान्य करना। उन्हें ऑब्जेक्ट प्रकार अनुभाग में घोषित किया जाता है और ऑब्जेक्ट प्रकार के ऑब्जेक्ट प्रकार बॉडी अनुभाग में परिभाषित किया जाता है। ऑब्जेक्ट प्रकार में बॉडी अनुभाग एक वैकल्पिक भाग है। यदि कोई सदस्य मौजूद नहीं है, तो ऑब्जेक्ट प्रकार में कोई बॉडी भाग नहीं होगा।

इसमें ऑब्जेक्ट बनाएं Oracle

ऑब्जेक्ट टाइप को सबप्रोग्राम स्तर पर नहीं बनाया जा सकता है, उन्हें केवल स्कीमा स्तर पर ही बनाया जा सकता है। एक बार स्कीमा में ऑब्जेक्ट टाइप परिभाषित हो जाने के बाद, उसे सबप्रोग्राम में इस्तेमाल किया जा सकता है। ऑब्जेक्ट टाइप को 'CREATE TYPE' का उपयोग करके बनाया जा सकता है। टाइप बॉडी को उसके ऑब्जेक्ट टाइप को बनाने के बाद ही बनाया जा सकता है।

इसमें ऑब्जेक्ट बनाएं Oracleइसमें ऑब्जेक्ट बनाएं Oracle

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;‭
.
.	‬
);
/

वाक्यविन्यास स्पष्टीकरण:

  • उपरोक्त सिंटैक्स विशेषताओं के साथ 'OBJECT' और विधियों के साथ 'OBJECT-BODY' का निर्माण दर्शाता है।
  • विधियों को ऑब्जेक्ट बॉडी में ओवरलोड भी किया जा सकता है।

ऑब्जेक्ट प्रकार की घोषणा आरंभीकरण

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

एक बार ऑब्जेक्ट प्रकार बना लेने के बाद, उसका उपयोग उपप्रोग्राम घोषणात्मक अनुभाग में उस ऑब्जेक्ट प्रकार के चर को घोषित करने के लिए किया जा सकता है।

जब भी सबप्रोग्राम में किसी वैरिएबल को ऑब्जेक्ट टाइप के रूप में घोषित किया जाता है, तो रन-टाइम पर ऑब्जेक्ट टाइप का एक नया इंस्टेंस बनाया जाएगा, और इस नए बनाए गए इंस्टेंस को वैरिएबल नाम से संदर्भित किया जा सकता है। इस तरह, एक ही ऑब्जेक्ट टाइप अलग-अलग इंस्टेंस के तहत कई मान संग्रहीत कर सकता है।

ऑब्जेक्ट प्रकार की घोषणा आरंभीकरण

DECLARE
<variable_name> <object_type_name>;
BEGIN
.
.
END;
/

वाक्यविन्यास स्पष्टीकरण:

  • उपरोक्त सिंटैक्स, घोषणात्मक अनुभाग में एक ऑब्जेक्ट प्रकार के रूप में एक चर की घोषणा को दर्शाता है।

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

कंस्ट्रक्टर किसी ऑब्जेक्ट का अंतर्निहित तरीका है जिसे ऑब्जेक्ट प्रकार के समान नाम से संदर्भित किया जा सकता है। नीचे दिया गया सिंटैक्स ऑब्जेक्ट प्रकार के आरंभीकरण को दर्शाता है।

ऑब्जेक्ट प्रकार की घोषणा आरंभीकरण

DECLARE
<variable_name> <object_type_name>; 
BEGIN
<variable_name>:=<object_type_name>();
END;
/

वाक्यविन्यास स्पष्टीकरण:

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

कंस्ट्रक्टर्स

कंस्ट्रक्टर किसी ऑब्जेक्ट का निहित तरीका है जिसे ऑब्जेक्ट प्रकार के समान नाम से संदर्भित किया जा सकता है। जब भी ऑब्जेक्ट को पहली बार संदर्भित किया जाता है, तो इस कंस्ट्रक्टर को निहित रूप से बुलाया जाएगा।

हम इन कन्स्ट्रक्टर का उपयोग करके ऑब्जेक्ट को इनिशियलाइज़ भी कर सकते हैं। कन्स्ट्रक्टर को ऑब्जेक्ट टाइप बॉडी में सदस्य को ऑब्जेक्ट टाइप के समान नाम से परिभाषित करके स्पष्ट रूप से परिभाषित किया जा सकता है।

उदाहरण 1: निम्नलिखित उदाहरण में हम रिकॉर्ड को emp टेबल में ('RRR', 1005, 20000, 1000) और ('PPP', 1006, 20000, 1001) मानों के साथ डालने के लिए ऑब्जेक्ट टाइप सदस्य का उपयोग करने जा रहे हैं। एक बार डेटा डालने के बाद, हम ऑब्जेक्ट टाइप सदस्य का उपयोग करके इसे प्रदर्शित करने जा रहे हैं। हम दूसरे रिकॉर्ड के लिए डिफ़ॉल्ट रूप से 1001 मान के साथ प्रबंधक आईडी को पॉप्युलेट करने के लिए स्पष्ट कंस्ट्रक्टर का भी उपयोग करने जा रहे हैं।

हम इसे नीचे दिए गए चरणों में निष्पादित करने जा रहे हैं।

  • Step1:
  • ऑब्जेक्ट प्रकार बनाएँ
  • ऑब्जेक्ट प्रकार बॉडी
  • चरण 2: emp_no 1005 के लिए अंतर्निहित कन्स्ट्रक्टर के माध्यम से निर्मित ऑब्जेक्ट प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाना।
  • चरण 3: emp_no 1006 के लिए स्पष्ट कन्स्ट्रक्टर के माध्यम से निर्मित ऑब्जेक्ट प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाना।

चरण 1) ऑब्जेक्ट प्रकार और ऑब्जेक्ट प्रकार बॉडी बनाएँ

कंस्ट्रक्टर्स

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);
/

कंस्ट्रक्टर्स

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.managerial:=1001;
RETURN;
END:
MEMBER PROCEDURE insert_records
IS
BEGIN
INSERT INTO emp VALUES(emp_noemp_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:
/

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

  • कोड लाइन 1-9: 4 विशेषताओं और 3 सदस्यों के साथ 'emp_object' ऑब्जेक्ट प्रकार बनाना। इसमें केवल 3 पैरामीटर वाले कंस्ट्रक्टर की परिभाषा शामिल है। (वास्तविक निहित कंस्ट्रक्टर में ऑब्जेक्ट प्रकार में मौजूद विशेषताओं की संख्या के बराबर पैरामीटर की संख्या होगी)
  • कोड लाइन 10: प्रकार बॉडी बनाना.
  • कोड लाइन 11-21: स्पष्ट कन्स्ट्रक्टर को परिभाषित करना। विशेषताओं को पैरामीटर मान निर्दिष्ट करना तथा विशेषता 'मैनेजर' के लिए डिफ़ॉल्ट मान '1001' निर्दिष्ट करना।
  • कोड लाइन 22-26: सदस्य 'insert_records' को परिभाषित करना जिसमें विशेषता मान 'emp' तालिका में डाले जाते हैं।
  • कोड लाइन 27-34: सदस्य 'display_records' को परिभाषित करना जिसमें ऑब्जेक्ट प्रकार विशेषताओं के मान प्रदर्शित करना।

उत्पादन

प्रकार बनाया गया

प्रकार बॉडी बनाई गई

चरण 2) emp_no 1005 के लिए अंतर्निहित कन्स्ट्रक्टर के माध्यम से निर्मित ऑब्जेक्ट प्रकार को कॉल करने के लिए अनाम ब्लॉक बनाना

कंस्ट्रक्टर्स

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;

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

  • कोड लाइन 37-45: इंप्लिसिट कन्स्ट्रक्टर का उपयोग करके रिकॉर्ड सम्मिलित करना। कन्स्ट्रक्टर को कॉल करने पर विशेषताओं के मानों की वास्तविक संख्या शामिल होती है।
  • कोड लाइन 38: guru_emp_det को 'emp_object' के ऑब्जेक्ट प्रकार के रूप में घोषित करता है।
  • कोड लाइन 41: कथन 'guru_emp_det.display_records' ने 'diplay_records' सदस्य फ़ंक्शन को कॉल किया और विशेषता मान प्रदर्शित किए गए
  • कोड लाइन 42: कथन 'guru_emp_det.insert_records' 'insert_records' सदस्य फ़ंक्शन को कॉल करता है और विशेषता मान तालिका में सम्मिलित किए जाते हैं।

उत्पादन

कर्मचारी का नाम: आरआरआर

कर्मचारी संख्या: 1005

वेतन : 20000

प्रबंधक : 1000

चरण 3) emp_no 1006 के लिए स्पष्ट कन्स्ट्रक्टर के माध्यम से निर्मित ऑब्जेक्ट प्रकार को कॉल करने के लिए अनाम ब्लॉक बनाना

कंस्ट्रक्टर्स

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

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

  • कोड लाइन 46-53: स्पष्ट कन्स्ट्रक्टर का उपयोग करके रिकॉर्ड सम्मिलित करना।
  • कोड लाइन 46: guru_emp_det को 'emp_object' के ऑब्जेक्ट प्रकार के रूप में घोषित करता है।
  • कोड लाइन 50: कथन 'guru_emp_det.display_records' 'display_records' सदस्य फ़ंक्शन को कॉल करता है और विशेषता मान प्रदर्शित होते हैं
  • कोड लाइन 51: कथन 'guru_emp_det.insert_records' 'insert_records' सदस्य फ़ंक्शन को कॉल करता है और विशेषता मान तालिका में सम्मिलित किए जाते हैं।

ऑब्जेक्ट प्रकार में वंशानुक्रम

वंशानुक्रम गुण उप-ऑब्जेक्ट प्रकार को सुपर ऑब्जेक्ट प्रकार या पैरेंट ऑब्जेक्ट प्रकार के सभी विशेषताओं और सदस्यों तक पहुंचने की अनुमति देता है।

सब-ऑब्जेक्ट प्रकार को इनहेरिटेड ऑब्जेक्ट प्रकार कहा जाता है, और सुपर ऑब्जेक्ट प्रकार को पैरेंट ऑब्जेक्ट प्रकार कहा जाता है। नीचे दिया गया सिंटैक्स पैरेंट और इनहेरिटेड ऑब्जेक्ट प्रकार बनाने का तरीका दिखाता है।

ऑब्जेक्ट प्रकार में वंशानुक्रम

CREATE TYPE <object_type_name_parent> AS OBJECT
(
<attribute_l><datatype>,
.
.
)NOT FINAL;
/

वाक्यविन्यास स्पष्टीकरण:

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

ऑब्जेक्ट प्रकार में वंशानुक्रम

CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent>
(
<attribute_l><datatype>,
.
);
/

वाक्यविन्यास स्पष्टीकरण:

  • उपरोक्त सिंटैक्स SUB प्रकार के निर्माण को दर्शाता है। इसमें पैरेंट ऑब्जेक्ट प्रकार के सभी सदस्य और विशेषताएँ शामिल हैं।

Example1: नीचे दिए गए उदाहरण में, हम निम्नलिखित रिकॉर्ड ('आरआरआर', 1002, 1007) के लिए प्रबंधक आईडी '20000' के साथ रिकॉर्ड सम्मिलित करने के लिए इनहेरिटेंस प्रॉपर्टी का उपयोग करने जा रहे हैं।

हम उपरोक्त कार्यक्रम को निम्नलिखित चरणों में निष्पादित करने जा रहे हैं

  • चरण 1: SUPER प्रकार बनाएं.
  • चरण 2: SUB प्रकार और बॉडी बनाएं.
  • चरण 3: SUB प्रकार को कॉल करने के लिए एक अनाम ब्लॉक बनाना।

चरण 1) SUPER प्रकार या पैरेंट प्रकार बनाएँ.

ऑब्जेक्ट प्रकार में वंशानुक्रम

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;
/

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

  • कोड लाइन 1-9: 4 विशेषताओं और 3 सदस्यों के साथ 'emp_object' ऑब्जेक्ट प्रकार बनाना। इसमें केवल 3 पैरामीटर वाले कंस्ट्रक्टर की परिभाषा शामिल है। इसे 'NOT FINAL' के रूप में घोषित किया गया है, इसलिए यह पैरेंट प्रकार है।

चरण 2) SUPER प्रकार के अंतर्गत SUB प्रकार बनाएं.

ऑब्जेक्ट प्रकार में वंशानुक्रम

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;
/

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

  • कोड लाइन 10-13: एक अतिरिक्त विशेषता 'default_manager' और सदस्य प्रक्रिया घोषणा के साथ विरासत प्रकार के रूप में sub_emp_object बनाना।
  • कोड लाइन 14: विरासत में मिली ऑब्जेक्ट प्रकार के लिए बॉडी बनाना।
  • कोड लाइन 16-21: सदस्य प्रक्रिया को परिभाषित करना जो प्रबंधक मान को छोड़कर, 'SUPER' ऑब्जेक्ट प्रकार से मानों के साथ “emp” तालिका में रिकॉर्ड सम्मिलित कर रहा है। प्रबंधक मान के लिए, यह 'SUB' प्रकार से 'default_manager' का उपयोग कर रहा है।

चरण 3) 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;
/

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

  • कोड लाइन 25: 'guru_emp_det' को 'sub_emp_object' प्रकार के रूप में घोषित किया जा रहा है।
  • कोड लाइन 27: ऑब्जेक्ट को इंप्लिसिट कंस्ट्रक्टर के साथ इनिशियलाइज़ करना। कंस्ट्रक्टर में 5 पैरामीटर हैं (PARENT टाइप से 4 विशेषताएँ और SUB टाइप से 2 विशेषताएँ)। अंतिम पैरामीटर (1002) default_manager विशेषता के लिए मान को परिभाषित करता है
  • कोड लाइन 28: कन्स्ट्रक्टर में पास किए गए डिफ़ॉल्ट प्रबंधक आईडी के साथ रिकॉर्ड सम्मिलित करने के लिए सदस्य 'insert_default_mgr' को कॉल करना।

PL/SQL ऑब्जेक्ट्स की समानता

समान ऑब्जेक्ट से संबंधित ऑब्जेक्ट इंस्टेंस की समानता के लिए तुलना की जा सकती है। इसके लिए, हमें ऑब्जेक्ट प्रकार में 'ORDER' विधि नामक विशेष विधि की आवश्यकता होती है।

यह 'ORDER' विधि वह फ़ंक्शन होना चाहिए जो संख्यात्मक प्रकार लौटाता है। यह इनपुट के रूप में दो पैरामीटर लेता है, (पहला पैरामीटर: स्व-ऑब्जेक्ट इंस्टेंस की आईडी, दूसरा पैरामीटर: किसी अन्य ऑब्जेक्ट इंस्टेंस की आईडी)।

दो ऑब्जेक्ट इंस्टैंस की आईडी की तुलना की जाती है, और परिणाम संख्यात्मक रूप में लौटाया जाता है।

  • धनात्मक मान यह दर्शाता है कि SELF ऑब्जेक्ट इंस्टेंस किसी अन्य इंस्टेंस से बड़ा है।
  • ऋणात्मक मान यह दर्शाता है कि SELF ऑब्जेक्ट इंस्टेंस किसी अन्य इंस्टेंस से छोटा है।
  • शून्य यह दर्शाता है कि SELF ऑब्जेक्ट इंस्टैंस किसी अन्य इंस्टैंस के बराबर है।
  • यदि कोई भी उदाहरण शून्य है, तो यह फ़ंक्शन शून्य लौटाएगा।

PL/SQL ऑब्जेक्ट्स की समानता

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 object_type_name के उदाहरण हैं।

उदाहरण 1: निम्नलिखित उदाहरण में हम देखेंगे कि दो ऑब्जेक्ट की तुलना कैसे की जाती है। हम दो इंस्टेंस बनाने जा रहे हैं और हम उनके बीच विशेषता 'वेतन' की तुलना करने जा रहे हैं। हम दो चरणों में ऐसा करने जा रहे हैं।

  • चरण 1: ऑब्जेक्ट प्रकार और बॉडी बनाना.
  • चरण 2: ऑब्जेक्ट इंस्टैंस की तुलना करने के लिए अनाम ब्लॉक बनाना।

चरण 1) ऑब्जेक्ट प्रकार और बॉडी बनाना.

PL/SQL ऑब्जेक्ट्स की समानता

PL/SQL ऑब्जेक्ट्स की समानता

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;
/

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

  • कोड पंक्ति 1-4: 1 विशेषताओं और 1 सदस्य के साथ 'emp_object_equality' ऑब्जेक्ट प्रकार बनाना।
  • कोड लाइन 6-16: ORDER फ़ंक्शन को परिभाषित करना जो SELF इंस्टेंस और पैरामीटर इंस्टेंस प्रकार की 'वेतन' विशेषता की तुलना करता है। यदि SELF वेतन कम है तो यह ऋणात्मक या यदि SELF वेतन अधिक है तो धनात्मक और यदि वेतन बराबर हैं तो 0 लौटाता है।

कोड आउटपुट:

प्रकार बनाया गया

चरण 2) ऑब्जेक्ट इंस्टैंस की तुलना करने के लिए अनाम ब्लॉक बनाना।

PL/SQL ऑब्जेक्ट्स की समानता

DECLARE
l_obj_l emp_object_equality;
l_obj_2 emp_object_equality;
BEGIN
l_obj_l:=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_l.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

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

  • कोड लाइन 20: emp_object_equality प्रकार के l_obj_1 की घोषणा करना।
  • कोड लाइन 21: emp_object_equality प्रकार के l_obj_2 की घोषणा करना।
  • कोड लाइन 23: वेतन मान '1' के साथ l_obj_15000 को आरंभ किया जा रहा है
  • कोड लाइन 24: वेतन मान '1' के साथ l_obj_17000 को आरंभ किया जा रहा है
  • कोड लाइन 25-33ORDER फ़ंक्शन से रिटर्न नंबर के आधार पर संदेश प्रिंट करें।

सारांश

इस अध्याय में हमने ऑब्जेक्ट के प्रकार और उनके गुणों को देखा है। हमने PL/SQL ऑब्जेक्ट में कंस्ट्रक्टर, मेंबर्स, एट्रिब्यूट्स, इनहेरिटेंस और इक्वालिटी के बारे में भी चर्चा की है।