我有一個數據庫包中的函數,它返回一個流水線對象集合。我希望推廣該功能,以便可以根據不同的數據調用相同的功能。但是,我希望保留現有的兼容性功能。有什麼辦法可以在不循環行的情況下傳遞管道?PL/SQL:你能傳遞一個流水線函數的返回數據嗎?
一個例子,使其更清晰。我有一個函數foo:
FUNCTION foo(some_id in varchar2) return mypackage.mytype pipelined is
arFoo mypackage.mytype;
BEGIN
-- do stuff to fill data in arFoo based on some_id
for i in nvl(arFoo.first,0) .. nvl(arFoo.last, -1) loop
pipe row(arFoo(i));
end loop;
return;
END;
我將創建一個功能欄,而不是
FUNCTION bar(arData in myParamType) return return mypackage.mytype pipelined is
arFoo mypackage.mytype;
BEGIN
-- do stuff to fill data in arFoo based on data in arData
for i in nvl(arFoo.first,0) .. nvl(arFoo.last, -1) loop
pipe row(arFoo(i));
end loop;
return;
END;
我會喜歡保留以下列方式FOO:
FUNCTION foo(some_id in varchar2) return mypackage.mytype pipelined is
arData myParamType;
BEGIN
-- do stuff to fill data in arData based on some_id
return arBar(arData);
END;
然而, return arBar(arData);
是不允許的 - 流水線功能本身必須有return
作爲staement。現在的問題是如何通過bar
返回至foo
返回我能看到的唯一方法管道連接管道是循環的結果,再管他們:
for r in (select * from table(bar(arData))) loop
pipe row(r);
end loop;
然而,這令我特別低效。是否有更有效的方法將bar
的管道連接到foo
的管道而不循環?