我有两个功能-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;
答案 0 :(得分:1)
您的代码有一些错误。您必须先声明j_list
才能使用它。 j_list
的范围必须在使用前声明。参见下文如何操作。同样,方法extend
应该在begin
块中使用,而不要在declaration
块中使用。
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;