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$
;