在我的包装规格中,我已经声明了以下类型:
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吗?