我有一个函数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;
答案 0 :(得分: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;