継承と多型を使用して、これらの文字列を処理する一般的な方法を構築できます。オブジェクトを使用する場合は、オブジェクト指向プログラミングの機能を活用する必要があります。
まず、ルートオブジェクトが必要です。このTYPEはインスタンス化できません。つまり、実際にインスタンスを宣言することはできません。 TO_STRING()メンバ関数もNOT INSTANTIABLEとして宣言されていることに注意してください。つまり、STRINGABLE_TYPEから継承するすべての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から継承するタイプの1つです。 OVERRIDINGキーワードは、親の宣言がそれを実装することを強要しているにもかかわらず、必須です。の不思議を通じて
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>
:ここ
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>
で、私たちは、ジェネリック型を取り、ジェネリックメソッドを呼び出す関数を作成することができますポリモフィズム関数に2つの異なるオブジェクトを渡すことができます。実際にはオーバーライドメソッドが実行されます:
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>
この時点までにはかなりの作業が必要です。オラクルのTYPEに少なくともTO_STRING()が焼き付けられていれば、それはうまくいくでしょう。しかし、それはオブジェクト実装の多くの緩やかな終わりの一つです。
オブジェクト型の偉大な継承の例! –