यह इन तार से निपटने, विरासत और बहुरूपता का उपयोग करके की एक सामान्य तरीके का निर्माण संभव है। यदि हम वस्तुओं का उपयोग करने जा रहे हैं, तो हमें ऑब्जेक्ट-ऑरिनेटेड प्रोग्रामिंग की क्षमताओं का लाभ उठाना चाहिए।
सबसे पहले हमें रूट ऑब्जेक्ट की आवश्यकता है। यह प्रकार तत्काल नहीं है, जिसका अर्थ है कि हम वास्तव में इसका एक उदाहरण घोषित नहीं कर सकते हैं। ध्यान दें कि TO_STRING() सदस्य फ़ंक्शन को INSTANTIABLE के रूप में भी घोषित नहीं किया गया है। इसका अर्थ यह है कि STRINGABLE_TYPE से प्राप्त होने वाले किसी भी प्रकार के पास विधि का अपना कार्यान्वयन होना चाहिए।
SQL> create or replace type stringable_type as object
2 (id number(7,0)
3 , NOT INSTANTIABLE member function to_string
4 return varchar2
5 )
6 not final not instantiable
7/
Type created.
SQL>
यहाँ एक प्रकार है जो STRINGABLE_TYPE से विरासत है। ओवरराइडिंग कीवर्ड अनिवार्य है, भले ही माता-पिता के प्रकार की घोषणा हमें लागू करने के लिए मजबूर करती है।
SQL> create or replace type emp_type under stringable_type
2 (empno number(7,0)
3 , ename varchar2(20)
4 , sal number(7,2)
5 , OVERRIDING member function to_string
6 return varchar2
7 );
8/
Type created.
SQL> create or replace type body emp_type
2 is
3 OVERRIDING member function to_string
4 return varchar2
5 is
6 begin
7 return 'EMP>>'||self.id||'='||self.empno||'::'||self.ename||'::'||self.sal;
8 end;
9 end;
10/
Type body created.
SQL>
इधर, एक अन्य प्रकार
SQL> create or replace type dept_type under stringable_type
2 (deptno number(2,0)
3 , dname varchar2(30)
4 , OVERRIDING member function to_string
5 return varchar2
6 );
7/
Type created.
SQL> create or replace type body dept_type
2 is
3 OVERRIDING member function to_string
4 return varchar2
5 is
6 begin
7 return 'DEPT>>'||self.id||'='||self.deptno||'::'||self.dname;
8 end;
9 end;
10/
Type body created.
SQL>
है ... अब हम एक समारोह जो सामान्य प्रकार लेता है और सामान्य विधि को आमंत्रित कर सकते हैं: के चमत्कार के माध्यम से
SQL> create or replace function type_to_string
2 (p_obj in stringable_type)
3 return varchar2
4 is
5 begin
6 return p_obj.to_string();
7 end;
8/
Function created.
SQL>
polymorphism हम समारोह में दो अलग-अलग वस्तुओं को पारित कर सकते हैं, जो वास्तव में ओवरराइडिंग विधि निष्पादित करेगा:
SQL> set serveroutput on
SQL> declare
2 obj1 emp_type;
3 obj2 dept_type;
4 begin
5 obj1 := emp_type(1, 8000, 'VAN WIJK', 3500);
6 obj2 := dept_type(2, 20, 'COMMUNICATIONS');
7 dbms_output.put_line(type_to_string(obj1));
8 dbms_output.put_line(type_to_string(obj2));
9 end;
10/
EMP>>1=8000::VAN WIJK::3500
DEPT>>2=20::COMMUNICATIONS
PL/SQL procedure successfully completed.
SQL>
इस बिंदु पर पहुंचने के लिए यह काफी काम है। ओरेकल के प्रकार में कम से कम एक सारणी TO_STRING() में बेक्ड होने पर यह साफ होगा, जिसे हम केवल ओवरराइड कर सकते हैं। लेकिन यह उनके ऑब्जेक्ट कार्यान्वयन में कई ढीले सिरों में से एक है 8-)
ऑब्जेक्ट प्रकारों का ग्रेट विरासत उदाहरण! –