【发布时间】:2018-10-17 02:02:19
【问题描述】:
场景很简单。将一组结果定义为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
谢谢
【问题讨论】:
标签: postgresql plpgsql postgresql-10