【发布时间】:2018-06-17 06:29:56
【问题描述】:
PostgreSQL 从版本 11 开始支持存储过程(not function)。我创建了一个这样的存储过程:
CREATE OR REPLACE PROCEDURE get_user_list ()
LANGUAGE SQL
SECURITY DEFINER
AS $$
SELECT "id",
"username",
"display_name"
FROM "user"
ORDER BY "created_at" ASC;
$$;
但是当我尝试执行这个存储过程时,它没有返回任何数据:
postgres=# CALL get_user_list();
CALL
postgres=# SELECT * FROM get_user_list();
ERROR: get_user_list() is a procedure
LINE 1: SELECT * FROM get_user_list();
^
HINT: To call a procedure, use CALL.
那么问题来了,存储过程如何在 PostgreSQL 11+ 中返回其结果集?
【问题讨论】:
-
您需要定义存储过程返回的内容。例如,请参阅this question。
-
@JoakimDanielson:这种误解可能是由于“存储过程”这一广泛的误称。 SQL 过程 不是函数。见:dba.stackexchange.com/a/194811/3684
-
@ErwinBrandstetter
SQL procedures are not functions- 我不会用词不当。 Oracle 和 SQL Server 都支持从存储过程返回结果集。