Как я могу использовать два курсора, один на основе выходных данных другого? в основном то, что я пытаюсь получить, это заменить все статусы, равные 'S', на предыдущие значения статуса.
- Курсор day_to_process: перечисляет все даты, когда статус равен 'S'
- Курсор status_to_process: получает последний статус перед 'S'
Ошибка, которую я получаю:
ОШИБКА: отсутствует запись предложения FROM для таблицы "day_to_process" Где: PL / pg SQL функция scrat.update_status ()
create or replace function scrat.update_status() returns void
language plpgsql
as
$$
DECLARE
day_to_process CURSOR FOR (SELECT distinct inst_status.status_date
FROM scrat.inst_status
WHERE inst_status.status = 'S'
ORDER BY 1);
status_to_process CURSOR for (select inst_status.status, max(inst_status.status_date)
FROM scrat.inst_status
where inst_status.status <> 'S'
and inst_status.status_date < day_to_process.status_date
group by status
order by 2 desc
limit 1);
curr_date TEXT;
curr_status TEXT;
BEGIN
OPEN day_to_process;
OPEN status_to_process;
LOOP
FETCH day_to_process INTO curr_date;
FETCH status_to_process INTO curr_status;
update scrat.inst_status
set inst_status.status = status_to_process.status
where inst_status.status_date = curr_date;
END LOOP;
END ;
$$;