PG return next & return query

PG return next & return query

RETURN NEXT expression;
RETURN QUERY query;
RETURN QUERY EXECUTE command-string [ USING expression [, ... ] ];

如果一个PL/pgSQL函数声明为返回SETOF sometype,那么遵循的过程则略有不同。
在这种情况下,要返回的独立项是在RETURN NEXT或者 RETURN QUERY命令里声明的,然后最后有一个不带参数的RETURN命令用于告诉这个函数已经完成执行了。
RETURN NEXT可以用于标量和复合数据类型;对于复合类型,将返回一个完整的结果"table"。
RETURN QUERY命令将一条查询的结果追加到一个函数的结果集中。
RETURN NEXT和RETURN QUERY在单一集合返回函数中自由混合,在这种情况下,结果将被级联。

RETURN NEXT和RETURN QUERY实际上不会从函数中返回,它们是将零或者多个行追加到函数的结果集中。然后继续执行PL/pgSQL函数里的下一条语句。随着后继的RETURN NEXT或者RETURN QUERY命令的执行,结果集就建立起来了。最后一个RETURN应该没有参数,它导致控制退出该函数(或者你可以简单地让控制到达函数的结尾)。

RETURN QUERY有一个变形RETURN QUERY EXECUTE,指定查询将被动态执行。参数表达式可以通过USING插入到计算查询字符串中,以EXECUTE命令的同样方式。

如果你声明函数带有输出参数,那么就只需要写不带表达式的RETURN NEXT。 输出参数的当前值将被保存,用于最终返回。请注意如果有多个输出参数, 比如声明函数为返回SETOF record或者是在只有一个类型为sometype的输出参数时声明 为SETOF sometype, 这样才能创建一个带有输出参数的返回集合的函数。

注意: 目前RETURN NEXT和RETURN QUERY 实现在从函数返回之前把整个结果集都保存起来, 就像上面描述的那样。这意味着如果一个PL/pgSQL函数生成一个非常大的结果集, 性能可能会很差:数据将被写到磁盘上以避免内存耗尽, 但是函数在完成整个结果集的生成之前不会退出。 将来的PL/pgSQL版本可能会允许用户定义没有这样限制的返回集合的函数。 目前,数据开始向磁盘里写的时刻是由配置变量work_mem控制的。 拥有足够内存的管理员如果想在内存里存储更大的结果集, 则可以考虑把这个参数增大一些。

大结果集更倾向于使用游标的方式返回。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值