1

我有一个函数 Func_A 返回一个表变量。现在我想创建另一个函数 Func_B 多次调用 Func_A 并返回 Func_A 的所有结果组合。但只返回 Func_A 的最后一个结果。如何将函数 a 的所有结果合并在一起?

CREATE TYPE RowType AS OBJECT (ItemNumber int, ItemName varchar2(255));
/
CREATE TYPE TableType AS TABLE OF RowType;
/

create or replace
FUNCTION Func_A (v_test int)
RETURN TableType AS 
v_result TableType := TableType();
BEGIN  
  FOR i IN 1..5 LOOP
    v_result.extend;
    v_result(v_result.last) := RowType(i * v_test, 'Blub');
  END LOOP;
  RETURN v_result;
END;

create or replace
FUNCTION Func_B
RETURN TableType AS 
v_result TableType := TableType();
BEGIN  
  FOR i IN 1..5 LOOP
    SELECT cast(multiset (select * FROM TABLE(Func_A(i))) as TableType)
    INTO v_result
    FROM DUAL;
  END LOOP;
  RETURN v_result;
END;

SELECT * FROM TABLE(Func_B())

这应该是最有效的方法:

v_result := Func_A(i) MULTISET UNION ALL v_result;
4

1 回答 1

0

在每次循环迭代中,您都v_result使用来自Func_A. 而是使用union将迭代的结果附加到先前迭代的结果。

FOR i IN 1..5 LOOP
  SELECT cast(multiset (select * FROM TABLE(Func_A(i))) as TableType)
         multiset union all v_result
    INTO v_result
    FROM DUAL;
END LOOP;
于 2013-09-20T08:14:05.153 回答