У меня есть функция Func_A, которая возвращает переменную таблицы. Теперь я хочу создать другую функцию Func_B, которая вызывает Func_A несколько раз и возвращает все результаты Func_A в сочетании. Но возвращается только последний результат Func_A. Как объединить все результаты функции a вместе?PLSQL - переменные таблицы слияния
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;
Это прекрасно работает. Является ли это наиболее эффективным методом или существуют другие возможности, связанные с объединением табличных переменных? – user2798190
@ пользователь2798190 AFAIK да - есть. Я вижу, что вы нашли простой синтаксис самостоятельно. См. Также [Назначение результатов операции установки для вложенных переменных таблицы] (http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/composites.htm#CIHIHEHG) из документации Oracle. – user272735