gpt4 book ai didi

postgresql - 如何从 PostgreSQL 存储过程返回结果集?

转载 作者:行者123 更新时间:2023-11-29 11:34:52 26 4
gpt4 key购买 nike

PostgreSQL 从版本 11 开始支持存储过程(非函数)。我创建了这样一个存储过程:

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+ 中返回其结果集?

最佳答案

跟随 docs 在 Postgres 11 上(大胆强调我的):

A procedure does not have a return value. A procedure can therefore end without a RETURN statement. If a RETURN statement is desired to exit the code early, then NULL must be returned. Returning any other value will result in an error.

不过,您可以将参数标记为输出,这样它们的行为就像变量一样。

附带说明一下,其他 DBMS 中通常有一个区别,即函数只能调用 SELECT 语句并且不应修改数据,而过程应处理数据操作和数据定义语言(DML、DDL)。这得出结论(在我看来)创建一个过程来简单地执行一个稳定的 (*) select 语句不是所需的技术。

(*) 阅读更多关于函数波动的信息 here .

关于postgresql - 如何从 PostgreSQL 存储过程返回结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com