如何重用流水线表函数的结果作为另一个函数的参数?

时间:2019-04-16 18:42:31

标签: oracle plsql

在我的包装规格中,我已经声明了以下类型:

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的更改将不再有用。

有人通过保持使用管道表功能的优势来解决change2吗?

0 个答案:

没有答案