Oracle PLSQL:将一个函数返回的数组分配到另一个函数中定义的数组中

Oracle PLSQL:将一个函数返回的数组分配到另一个函数中定义的数组中,oracle,plsql,plsql-package,Oracle,Plsql,Plsql Package,我有两个函数–func1和func2。func1从表中选择一些值并将其分配给数组并返回此数组。func2调用func1。func2使用func1返回的数组执行某些操作。我的问题是:如何将func1返回的数组分配给func2中的数组。请在下面查找func1和func2的代码片段 function func1 (table1 varchar2, table2 varchar2) return j_list is type j_list is varray (10) of VARCHAR2(

我有两个函数–func1和func2。func1从表中选择一些值并将其分配给数组并返回此数组。func2调用func1。func2使用func1返回的数组执行某些操作。我的问题是:如何将func1返回的数组分配给func2中的数组。请在下面查找func1和func2的代码片段

function func1 (table1 varchar2, table2 varchar2) return j_list
  is
   type j_list is varray (10) of VARCHAR2(50);
   attr_list j_list := j_list(); 
   counter integer :=0;  
  begin   
for i in 
    (select  a.column_name from  all_tab_columns a) 

    LOOP 
      counter := counter + 1; 
      attr_list.extend; 
      attr_list(counter)  := i.column_name;
    END LOOP;
   return attr_list;
end func1;


function func2 (table1 varchar2, table2 varchar2) return varchar2
  is
   type new_j_list is varray (10) of VARCHAR2(50);
   new_attr_list j_list := j_list();
   new_attr_list.extend;
   new_attr_list() := func1 (table1, table2) /*does this assign the array                  
that is returned by func1 into the array new_attr_list ??? */
   jt varchar2(4000);
  begin  
  jt := /*some operations using the new_attr_list*/
  return jt;
end func2; 

您的代码有一些错误。如果不首先声明,则不能使用
j_list
j_list
的范围必须在使用前声明。请参见下面的操作方法。方法
extend
也应在
begin
块中使用,而不是在
声明
块中使用

CREATE OR REPLACE TYPE j_list IS VARRAY (10) OF VARCHAR2(50);
/

CREATE OR REPLACE FUNCTION func1 (    table1 VARCHAR2,
                                      table2 VARCHAR2
                                  ) 
RETURN j_list 
IS    
    attr_list   j_list := j_list ();
    counter     INTEGER := 0;
BEGIN
    FOR i IN ( SELECT a.column_name FROM all_tab_columns a) 
    LOOP
        counter := counter + 1;
        attr_list.extend;
        attr_list(counter) := i.column_name;
    END LOOP;
    RETURN attr_list;
END func1;
/

CREATE OR REPLACE FUNCTION func2 ( table1 VARCHAR2,
                                  table2 VARCHAR2
) RETURN VARCHAR2 
IS
    new_attr_list   j_list := j_list ();
    jt              VARCHAR2(4000);
BEGIN
    new_attr_list.extend;
    new_attr_list:= func1(table1, table2 );

    jt := 'some operations using the new_attr_list';
    RETURN jt;
END func2;