Как получить набор результатов в процедуре Redshift после коммита? - PullRequest
0 голосов
/ 16 апреля 2020

Я создаю процедуры в Redshift. Я хочу добавить оператор выбора, чтобы проверить результаты перед оператором END, но он не работает.

Это прекрасно работает:

CREATE OR REPLACE PROCEDURE my_procedure()
    LANGUAGE plpgsql
AS $$                
BEGIN (a whole bunch of select into statements)
commit;
END;
$$;

Но когда я использую "select count (*) cnt from table" после коммита, я получаю ошибку, такую ​​как

" COMMIT не может быть вызвано из процедуры, которая выполняется в контексте atomi c "

. Я знаю, что могу создать my_procedure (текущий refcursor), который работает без фиксации, но я не смог получить для работы с коммитом:

open current for select count(*) cnt from table_name;

Кажется, SQL Сервер возвращает операторы select при выполнении вставок. Как это сделать в Redshift?

1 Ответ

0 голосов
/ 17 апреля 2020

Возможно, вы вызываете хранимую процедуру из открытой транзакции. См. Примеры для TRUNCATE в документации «Управление транзакциями» .

Вы можете увидеть некоторые примеры хранимых процедур Redshift, которые используют COMMIT в нашем репозитории Redshift Utils на GitHub . В частности, sp_sync_get_new_rows использует COMMIT и ROLLBACK условно.

...