gpt4 book ai didi

postgresql - 在 Postgres 中返回 json_build_object 处理删除语句中未找到的记录

转载 作者:行者123 更新时间:2023-11-29 14:30:28 27 4
gpt4 key购买 nike

我在使用 postgres 函数时遇到了一些问题,我删除了一行并返回了一个不存在该行的 json_build_object。

代码如下:

CREATE OR REPLACE FUNCTION DeleteXJSON(
in_x_id BIGINT)
RETURNS SETOF JSON AS
$BODY$
DECLARE
ref_json_data JSON;
BEGIN
DELETE FROM xtable WHERE x_id = in_x_id
RETURNING json_build_object('x_id', x_id) INTO ref_json_data;
RETURN QUERY (select ref_json_data);
END
$BODY$
LANGUAGE plpgsql

这在找到要删除的行时工作正常,但当没有找到行时它最终返回 1 行而不是预期的 0 行。

我已经简化了 json_build_object 字段,因为实际上我在其中返回了十几个字段。我该如何适本地处理它,以便在它不存在时返回 0 行?如果有更好的方法来处理这个问题,请告诉我。

更新#1:

我修复了伪造的 END IF。但是,如果我通过 psql 运行它:

select * from deletexjson(1);

我得到以下信息:

 deletecampjson 
----------------

(1 row)

最佳答案

eurotrash 指出的错误和 S-Man是杂散的 END IF

但是,正如目前所述,不需要将已删除行的 json 存储到 ref_json_data 中。也没有任何程序要素。也就是说,您可以编写 SQL 函数而不是 PLPGSQL 函数:

CREATE OR REPLACE FUNCTION deletexjson (xid BIGINT)
RETURNS SETOF JSON AS
$$
DELETE FROM xtable WHERE x_id = xid
RETURNING JSON_BUILD_OBJECT('x_id', x_id, 'x_rand', x_rand);
$$
LANGUAGE SQL

对于相同逻辑的更短的表达式(并且可能更快的评估)。

关于postgresql - 在 Postgres 中返回 json_build_object 处理删除语句中未找到的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52592704/

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