【发布时间】:2020-10-30 15:11:09
【问题描述】:
我想做什么
在插入表单时,我想检查表单是否不存在。 如果它存在,我想给插入一个更高的版本号。
所以我想我可以得到我试图插入的表单的最高版本号,在插入语句中使用它 + 1。
但它不起作用,我无法让它工作
CREATE OR REPLACE FUNCTION check_form_insert()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF (SELECT EXISTS(
SELECT *
FROM form
WHERE (name = NEW.name)
)
)
THEN
SELECT f.versionnumber
FROM form f
WHERE CONCAT(versionnumber, f.name) in (
SELECT CONCAT(MAX(versionnumber), name)
FROM form
GROUP BY name
) AND name = NEW.name;
INSERT INTO form (versionnumber, name, state, timestamp)
VALUES(
f.versionnumber + 1,
NEW.name,
1,
NOW()
);
END IF;
RETURN null;
END;
$$;
【问题讨论】:
-
如果表单还不存在怎么办,在这种情况下你想做什么?
-
然后它应该创建一个版本号为 1 的表单。但我还没有实现它,因为我可以让它工作
标签: sql postgresql max sql-insert