Как повторно использовать результат конвейерной табличной функции в качестве аргумента другой функции? - PullRequest
1 голос
/ 16 апреля 2019

в спецификации пакета я объявил эти типы:

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, сохранив преимущество использования функции таблицы конвейеров?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...