我必须在pl / sql中编写一个嵌套的流水线函数,我尝试按以下方式实现。
export MY_VARIABLE=123
tmux -L socket_name new-session
# in session
echo $MY_VARIABLE
-> 123
tmux -L socket_name detach
export MY_VARIABLE=456
tmux -L another_socket new-session
# in new session
echo $MY_VARIABLE
-> 456
但是,我收到以下错误
[错误] PLS-00653:PLS-00653:聚合/表函数不是 在PL / SQL范围中允许
我哪里错了?是语法还是逻辑?
答案 0 :(得分:1)
Piepelined函数逐个提供行(按需),因此您不能一次性地从流水线函数中放入所有行。
在我看来,您需要以这种方式更改main_xyz
:
function main_xyz return data_type_1 pipelined is
begin
--code
FOR rec IN (select * from table(XYZ.sub_func)) LOOP
pipe row(rec);
END LOOP;
end;
考虑sub_func
必须符合XYZ包的规范,因为您在SQL查询中使用的所有内容(包括PIPELINED函数)都是公开的(即对运行查询的用户可见)。
更新:我忘记警告:不要滥用流水线功能(如果你有另一种选择) - 使用它们的查询可能会有蹩脚的性能,因为数据库引擎无法为不可预测的管道行构建良好的执行计划。