场景很简单。将一组结果定义为TEMPORARY TABLE
,在另一个查询中将其用作IN
部分,然后在所有查询完成后返回该TEMPORARY TABLE
。
在我的情况下,定义delete_group
,在DELETE
中使用它,然后返回delete_group
。
我想到了这个
CREATE FUNCTION update_delete_honda
(modelId bigint, hondaId bigint)
RETURNS TABLE
(id bigint,name text)
AS $$
DECLARE
var_r record;
BEGIN
CREATE TEMPORARY TABLE delete_group (honda_id bigint,name text)
ON COMMIT DROP;
INSERT INTO delete_group (honda_id,name)
SELECT honda_id,name FROM car WHERE service_id is null and drive_id is null;
EXECUTE format(
'UPDATE car SET model_Id = null WHERE honda_Id=$1'
) USING modelId , hondaId;
DELETE FROM suv WHERE id IN (select honda_id from delete_group);
FOR var_r IN(delete_group)
LOOP
id := honda_id ;
name := name ;
RETURN NEXT;
END LOOP;
END;
$$
LANGUAGE plpgsql;
这不起作用。我得到ERROR: syntax error at or near "delete_group"
关于FOR var_r IN(delete_group)
行。
该如何解决?我使用PostgreSQL 10
谢谢
答案 0 :(得分:1)
将循环更改为
FOR var_r IN SELECT * FROM delete_group
,
并在
中使用suv.id
(而不是id
)
DELETE FROM suv WHERE suv.id IN (select honda_id from delete_group);
您没有提供关于car和suv表的定义,所以我不能确定该函数是否确实可以实现您想要的功能……但是上面的语法应该正确。