Процедура 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 = ''
Далее в цикле по каждой записи из выборки выше сделать следующие действия:
- Найти и запомнить 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
- В таблице контрактов в записи, которые привязаны к dubl_org_id текущей итерации в поле provider_id проставляем origin_org_id:
update contract set provider_id = origin_org_id
where provider_id = dubl_org_id