Postgresql: перебор всех записей таблицы в функции

Задача: обновить все записи одной таблицы, на основании данных другой таблицы. Причем условие сложное, которое просто в запрос update from select не впехнешь

Решение: сделаем функцию, которая собственно будет последовательно перебирать таблицу, и обновлять данные

CREATE OR REPLACE FUNCTION public.update_epd_cancel()
	RETURNS int4
	LANGUAGE plpgsql
AS $function$
DECLARE
    crsr CURSOR FOR SELECT * FROM refusals;  -- курсор для запроса
	emp RECORD;
	BEGIN
		 OPEN crsr;  -- открываем курсор
		LOOP
        FETCH crsr INTO emp;  -- извлекаем следующую строку в переменную
        EXIT WHEN NOT FOUND;  -- если строк больше нет — выходим
	    update ls set dt_cancel_epd_bill=emp.dt where ls.id=emp.ls; -- обработка строки
        update ls set dt_cancel_epd_bill=emp.dt where ls.id=emp.ls_epd; -- обработка строки
    END LOOP;
    CLOSE crsr;  -- закрываем курсор
    return 0;
	END;
$function$
;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.