Возвратите ВРЕМЕННЫЙ СТОЛ как таблицу в pl / pgsql - PullRequest
0 голосов
/ 16 октября 2018

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

Измените ваш цикл на

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, поэтому я не уверен, действительно ли функция выполняет то, что вы хотите ... но приведенный выше синтаксис должен быть правильным.

...