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();
|
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博客 ” ,链接:https://blog.itpub.net/69994931/viewspace-2793066/ ,如需转载,请注明出处,否则将追究法律责任。