我想知道是否可以使用自定义函数扩展任何类型的集合(关联数组、嵌套表、VArray)。
我希望能够以相同的样式定义自定义函数,我可以使用成员函数为常规类型执行此操作。使用它,我想创建一个函数,例如通过连接其项目将我的集合的内容转换为字符串。
我想知道是否可以使用自定义函数扩展任何类型的集合(关联数组、嵌套表、VArray)。
我希望能够以相同的样式定义自定义函数,我可以使用成员函数为常规类型执行此操作。使用它,我想创建一个函数,例如通过连接其项目将我的集合的内容转换为字符串。
不,这是不可能的。您可以做的是将集合封装成这样的另一种类型
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;
据我所知,Oracle 不提供向集合子类型添加方法或自定义函数的方法。我能想到的替代方案是:
您可以定义一个包装集合的 TYPE,然后在 TYPE 上定义方法。
您可以在包中定义集合子类型,然后在包中创建操作定义的集合子类型的过程/函数。
祝你好运。