如何在插入中使用来自 select 语句的值
How to use a value that came out of select statement in an insert
我想做什么
在插入表单时,我想检查该表单是否不存在。
如果它存在我想给插入一个更高的版本号。
所以我想我可以获得我试图插入的表单的最高版本号,在插入语句中使用它 + 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;
$$;
您可以在一个 insert ... select
语句中完成此操作:
insert into form (versionnumber, name, state, timestamp)
select coalesce(max(versionnumber), 0) + 1, , 1, now()
from form
where name = ;
逻辑是在table(默认为0
)中搜索表单的最后一个版本号,并递增。
是查询的参数,应该给出表单名称。我怀疑你需要一个触发器来做你想做的事。
我想做什么
在插入表单时,我想检查该表单是否不存在。 如果它存在我想给插入一个更高的版本号。
所以我想我可以获得我试图插入的表单的最高版本号,在插入语句中使用它 + 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;
$$;
您可以在一个 insert ... select
语句中完成此操作:
insert into form (versionnumber, name, state, timestamp)
select coalesce(max(versionnumber), 0) + 1, , 1, now()
from form
where name = ;
逻辑是在table(默认为0
)中搜索表单的最后一个版本号,并递增。
是查询的参数,应该给出表单名称。我怀疑你需要一个触发器来做你想做的事。