Процедура c циклом на pl/pgsql

Подскажите реализацию следующего алгоритма на pg/plsql. Сам алгоритм придумал, но не знаю как его реализовать в рамках postgres

Есть две таблицы

create table organisation(
    id int4, 
    full_name varchar(512), 
    name varchar(255), 
    short_name varchar(255), 
    activity_id int4
    )

create table contract(
    id int4, 
    registry_number varchar(30), 
    provider_id int4
    )

В таблице организаций есть дублирующие организации, к которым привязаны контракты в таблице контрактов(id из organisation прописан в поле provider_id в таблице contract). Нужно поменять привязку контрактов с дублирующих организаций на оригинальные.

Найти все дублирующие организации в таблице organisation:

select * from organisation o 
where activity_id is null and name is null and short_name = '' 

Далее в цикле по каждой записи из выборки выше сделать следующие действия:

  1. Найти и запомнить id оригинальной организации(origin_org_id) для дублирующей организации (dubl_org_id) текущий итерации (у них совпадает поле full_name, но оно в разных регистрах):
select id from organisation o 
where lower (full_name) = lower (<< full_name current iteration with dubl_org_id >>) and name is not null 
order by id asc
  1. В таблице контрактов в записи, которые привязаны к dubl_org_id текущей итерации в поле provider_id проставляем origin_org_id:
update contract set provider_id = origin_org_id
where provider_id = dubl_org_id

Ответы (0 шт):