Сценарий прост.Определите набор результатов как 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
Спасибо