ITPub博客

首页 > 数据库 > 国内数据库 > HGDB中函数返回-return next和return query

HGDB中函数返回-return next和return query

原创 国内数据库 作者:瀚高PG实验室 时间:2021-09-22 16:24:11 0 删除 编辑
目录
环境
文档用途
详细信息
环境
系统平台:IBM:Linux on System z Red Hat Enterprise Linux 7
版本:4.3.4.7
文档用途

HGDB中函数返回中return next、return query和return query execute的使用。

详细信息

当函数返回被声明为returns setof sometype时,返回的个体项被return next或者return query命令序列指定,并接着会用一个不带参数的return命令来指示这个函数已经完成执行。

创建测试表并插入数据:

highgo=# create table test(id int,name varchar);
CREATE TABLE
highgo=# insert into test values(1,'qqqq'),(2,'wwww'),(3,'dddd');
INSERT 0 3

1,return next的使用(可以返回标量和复合类型):

创建函数:

highgo=# create or replace function fn_return_nexts() returns setof test as $$
highgo$#   declare
highgo$#     r test%rowtype;                                                     
highgo$#
highgo$#   begin
highgo$#     for r in select * from test
highgo$# loop
highgo$#   raise notice '%',r.name; - -可以对每行数据进行操作
highgo$#   return next r;
highgo$#  end loop;
highgo$# return;
highgo$#   end
highgo$# $$
highgo-# language plpgsql;

CREATE FUNCTION

highgo=# select fn_return_nexts();
注意:  00000: qqqq
注意:  00000: wwww
注意:  00000: dddd
 fn_return_nexts
-----------------
 (1,qqqq)
 (2,wwww)
 (3,dddd)
(3 行记录)

2,return query的使用(执行一个查询,将结果追加到函数返回结果):

highgo=# create or replace function fn_return_query_() returns
highgo-# setof test as
highgo-# $$
highgo$#    begin
highgo$#        return query(select * from test);- -不能对查询的数据进行二次操作
highgo$#    end
highgo$# $$
highgo-# language plpgsql;
CREATE FUNCTION
highgo=# select fn_return_query_();
 fn_return_query_
------------------
 (1,qqqq)
 (2,wwww)
 (3,dddd)
(3 行记录)

3,return query execute的使用(用来执行动态查询):

highgo=# create or replace function fn_return_query_execute(t int) returns
highgo-# setof test as
highgo-# $$
highgo$#    declare
highgo$#    v_sql text;
highgo$#    begin
highgo$#        v_sql = 'select * from test where id =' ||t||';';
highgo$#    return query execute v_sql;
highgo$#    end
highgo$# $$
highgo-# language plpgsql;
CREATE FUNCTION
highgo=# select fn_return_query_execute(1);
 fn_return_query_execute
-------------------------
 (1,qqqq)
(1 行记录)


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69994931/viewspace-2793066/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
瀚高PG实验室(Highgo PG Lab)依托于瀚高DBA运维团队及瀚高数据库PG内核研发团队,旨在深入研究PostgreSQL技术、使用技巧、内核探秘、PG教学等,并进行分享。欢迎大家关注、交流。

注册时间:2021-02-18

  • 博文量
    57
  • 访问量
    19417