【问题标题】:Getting mutiple arrays from the Oracle SQL function从 Oracle SQL 函数获取多个数组
【发布时间】:2012-07-07 11:11:40
【问题描述】:

这个问题可能听起来有点荒谬,但是有没有可能从一个存储的函数中得到多个数组呢?例如:

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

【问题讨论】:

  • 简短回答:不。我认为您需要为您的问题添加更多上下文,您要实现什么目标?另外,函数在哪里被调用,就好像它不是来自 SQL 一样,您可以使用 out 参数。

标签: oracle function plsql oracle11g


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多