в спецификации пакета я объявил эти типы:
type myrecord is record (
a integer,
b integer,
);
type mytable is table of myrecord
Ранее я делал это в теле пакета:
function myfunction1 return mytable is
ret mytable;
SELECT * bulk collect into ret FROM aTableOfMyDatabase;
return ret;
end myfunction1
function myfunction2(arg mytable) return integer is
ret integer :=0;
SELECT COUNt(*) into ret from arg;
return ret;
end myfunction2
Я использовал эту функцию следующим образом
value integer :=myfunction2(myfunction1());
Я работаю, но это неэффективно, потому что хранится промежуточная таблица.
Поэтому я преобразовал первую функцию следующим образом:
function myfunction1 return mytable PIPELINED is
ret myrecord;-- instead of mytable
for c in (
SELECT * bulk collect into myrecord.a, myrecord.b FROM aTableOfMyDatabase
)LOOP
PIPE ROW(myrecord)
end loop;
-- NO REturn
end myfunction1
Но я могу использоватьРезультат function1 с function2, потому что тип отличается.И я не хочу создавать промежуточную таблицу, потому что изменение в function1 больше не будет полезным.
Есть ли у кого-нибудь решение изменить2, сохранив преимущество использования функции таблицы конвейеров?