使用成员函数扩展Oracle Collections

时间:2015-04-08 10:42:48

标签: oracle collections plsql nested-table

我想知道是否可以使用自定义函数扩展任何类型的集合(关联数组,嵌套表,VArray)。

我希望能够以相同的样式定义自定义函数,我可以使用成员函数为常规类型创建它。使用这个,我想创建一个函数,例如通过查询其项目将我的集合的内容转换为字符串。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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

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

  3. 祝你好运。