gpt4 book ai didi

sql - PostgreSQL 查询没有结果数据的目的地

转载 作者:行者123 更新时间:2023-11-29 12:57:39 25 4
gpt4 key购买 nike

我有以下触发器,它应该在每次将新记录插入到 posts 表中时将 number 分配给帖子。它查找范围为新记录的 project_idposts 的最大 number

  CREATE OR REPLACE FUNCTION assign_number()
RETURNS trigger AS
$BODY$
BEGIN
SELECT coalesce(MAX(number), 0) max_number FROM posts WHERE project_id = NEW.project_id;
NEW.number := max_number + 1;
RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;

CREATE TRIGGER post_created
BEFORE INSERT ON posts
FOR EACH ROW
EXECUTE PROCEDURE assign_number();

不幸的是,我在尝试执行 INSERT 时收到语法错误 query has no destination for result data。我已经尝试了所有我能想到的方法,并查看了 StackOverflow 上的每个相关问题,但似乎仍然无法解决这个问题。

关于这里出了什么问题有什么想法吗?有什么明显的我遗漏的吗?

最佳答案

是的,这是很明显的事情。您没有声明变量 max_number 并且您没有使用 INTO 子句:

CREATE OR REPLACE FUNCTION assign_number() RETURNS trigger AS $BODY$
DECLARE
max_number integer;
BEGIN
SELECT coalesce(MAX(number), 0) INTO max_number FROM posts
WHERE project_id = NEW.project_id;
NEW.number := max_number + 1;
RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;

或者,您可以不使用变量并将结果直接放入 NEW.number:

SELECT coalesce(MAX(number)+1, 1) INTO NEW.number FROM posts 
WHERE project_id = NEW.project_id;

甚至:

NEW.number := (SELECT coalesce(MAX(number)+1, 1) FROM posts 
WHERE project_id = NEW.project_id);

关于sql - PostgreSQL 查询没有结果数据的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39008623/

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