RETURN NEXT及RETURN QUERY

语法

创建函数时需要指定返回值SETOF datatype。

return_next_clause::=

RETURN NEXT及RETURN QUERY - 图1

return_query_clause::=

RETURN NEXT及RETURN QUERY - 图2

对以上语法的解释如下:

当需要函数返回一个集合时,使用RETURN NEXT或者RETURN QUERY向结果集追加结果,然后继续执行函数的下一条语句。随着后续的RETURN NEXT或RETURN QUERY命令的执行,结果集中会有多个结果。函数执行完成后会一起返回所有结果。

RETURN NEXT可用于标量和复合数据类型。

RETURN QUERY有一种变体RETURN QUERY EXECUTE,后面还可以增加动态查询,通过USING向查询插入参数。

示例

  1. postgres=# CREATE TABLE t1(a int);
  2. postgres=# INSERT INTO t1 VALUES(1),(10);
  3. --RETURN NEXT
  4. postgres=# CREATE OR REPLACE FUNCTION fun_for_return_next() RETURNS SETOF t1 AS $$
  5. DECLARE
  6. r t1%ROWTYPE;
  7. BEGIN
  8. FOR r IN select * from t1
  9. LOOP
  10. RETURN NEXT r;
  11. END LOOP;
  12. RETURN;
  13. END;
  14. $$ LANGUAGE PLPGSQL;
  15. postgres=# call fun_for_return_next();
  16. a
  17. ---
  18. 1
  19. 10
  20. (2 rows)
  21. -- RETURN QUERY
  22. postgres=# CREATE OR REPLACE FUNCTION fun_for_return_query() RETURNS SETOF t1 AS $$
  23. DECLARE
  24. r t1%ROWTYPE;
  25. BEGIN
  26. RETURN QUERY select * from t1;
  27. END;
  28. $$
  29. language plpgsql;
  30. postgres=# call fun_for_return_query();
  31. a
  32. ---
  33. 1
  34. 10
  35. (2 rows)