pl / sql中嵌套的PIPELINED函数

时间:2015-10-20 10:19:33

标签: oracle plsql pipelined-function

我必须在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范围中允许

我哪里错了?是语法还是逻辑?

1 个答案:

答案 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函数)都是公开的(即对运行查询的用户可见)。

更新:我忘记警告:不要滥用流水线功能(如果你有另一种选择) - 使用它们的查询可能会有蹩脚的性能,因为数据库引擎无法为不可预测的管道行构建良好的执行计划。