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

いいえ、それは不可能です。

まず、実際には同じ 2 つのタイプを作成する必要はありません。どちらのタイプも varchar2(4000) のテーブルです。したがって、1 つの型を作成し、そこから 2 つの変数を定義するだけで十分です。

複数の型/オブジェクトを返す関数を処理するには、コンテナ オブジェクトを作成し、オブジェクトを埋めて返すことができます。

タイプを作成します:

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

次に、2 つのメンバーを持つオブジェクト タイプを作成します。それぞれが上記のタイプのリストです。

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 に答える