0

カスタム関数を使用して、任意のタイプのコレクション (連想配列、ネストされたテーブル、VArray) を拡張できるかどうか疑問に思っています。

メンバー関数を使用して通常の型に対して実行できるのと同じスタイルでカスタム関数を定義できるようにしたいと考えています。これを使用して、たとえば、アイテムを連結してコレクションのコンテンツを文字列に変換する関数を作成したいと思います。

4

2 に答える 2

4

いいえ、できません。あなたができることは、コレクションをこのような別のタイプにカプセル化することです

create or replace type my_array as table of varchar2(10);
/
create or replace type my_array_type as object (
arr my_array, member function do_something return varchar2)
/
create or replace type body my_array_type is 
member function do_something return varchar2 is
l_temp varchar2(32767);
begin
for i in arr.first .. arr.last
loop
   l_temp:=l_temp||arr(i);
end loop;
return l_temp;
end;

end;

/

これで連結関数を試すことができます:

declare 
temp_array my_array:=my_array();
test_array my_array_type:=my_array_type(null);
result_string varchar2(32767);

begin
temp_array.extend(3);
temp_array(1):='a';
temp_array(2):='b';
temp_array(3):='c';

test_array:=my_array_type(temp_array);
result_string :=test_array.do_something;
dbms_output.put_line(result_string);

end;
于 2015-04-08T11:13:05.873 に答える
1

私が知る限り、オラクルはコレクションのサブタイプにメソッドやカスタム関数を追加する方法を提供していません。私が考えることができる代替案は次のとおりです。

  1. コレクションをラップする TYPE を定義してから、TYPE でメソッドを定義できます。

  2. パッケージでコレクションのサブタイプを定義し、定義されたコレクションのサブタイプを操作するプロシージャ/関数をパッケージで作成できます。

幸運を祈ります。

于 2015-04-08T11:02:11.863 に答える