0

这个问题可能听起来有点荒谬,但是是否可以从存储的函数中获取多个数组?例如:

CREATE OR REPLACE TYPE STRINGLISTT1 as table of varchar2(4000);
CREATE OR REPLACE TYPE STRINGLISTT2 as table of varchar2(4000);

create or replace function in_list(p_string in varchar2,p_delimiter in varchar2) 
      -- Returning two different arrays
      return StringListT, StringListT22 is
4

1 回答 1

1

不,它不可能。

首先,不需要创建两个实际上相同的类型。这两种类型都是 varchar2(4000) 的表。所以创建一种类型并从中定义两个变量就足够了。

要处理返回多个类型/对象的函数,您可以创建一个容器对象,填充该对象并返回它。

所以创建类型:

CREATE OR REPLACE TYPE STRING_LIST as table of varchar2(4000);

然后创建一个具有两个成员的对象类型,每个成员都是上述类型的列表

create or replace type TWO_STRING_LISTS as object
 (first_list STRING_LIST,
  second_list STRING_LIST 
 ); 

现在在您的函数中,您准备列表,创建一个对象并将列表放入其中,然后返回它:

create or replace function in_list(p_string in varchar2,p_delimiter in varchar2) 
      return TWO_STRING_LISTS is

 list1 STRING_LIST;
 list2 STRING_LIST;

begin

   //fill the lists

   return TWO_STRING_LISTS(list1,list2);
end;

当您从 in_list 函数取回对象时,您可以访问列表。

declare
  TWO_STRING_LISTS lists;
begin

  //some code 
  ........ 

  lists := in_list(........);

//reference first list
   lists.first_list    .....

end;
于 2012-07-07T21:02:22.807 回答