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

据我所知,Oracle 不提供向集合子类型添加方法或自定义函数的方法。我能想到的替代方案是:

  1. 您可以定义一个包装集合的 TYPE,然后在 TYPE 上定义方法。

  2. 您可以在包中定义集合子类型,然后在包中创建操作定义的集合子类型的过程/函数。

祝你好运。

于 2015-04-08T11:02:11.863 回答