在pl / pgsql中以表形式返回TEMPORARY TABLE

时间:2018-10-16 17:22:25

标签: postgresql plpgsql postgresql-10

场景很简单。将一组结果定义为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

谢谢

1 个答案:

答案 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表的定义,所以我不能确定该函数是否确实可以实现您想要的功能……但是上面的语法应该正确。