С последним обновлением Postres 11 . Теперь он поддерживает хранимые процедуры. Наконец, транзакции поддерживаются в хранимых процедурах в Postgres. Однако я безуспешно пытался выполнить коммит в рамках процедуры.
CREATE OR REPLACE PROCEDURE test_update(
IN pid character,
IN pcategoryname character varying,
IN pwebcode character varying,
IN porder numeric,
IN pupdatedby character varying,
IN pupdateddate timestamp without time zone,
IN plang character varying,
INOUT cresults refcursor)
LANGUAGE plpgsql
AS
$BODY$
DECLARE
cnt bigint;
rtnCode char(1);
BEGIN
cresults := 'cur';
BEGIN
update test_table
set FCATEGORYNAME = pCategoryName,
FWEBCODE = pWebCode,
FORDER = pOrder,
FUPDATEDBY = pUpdatedBy,
FUPDATEDDATE = pUpdatedDate,
FLANGCODE = pLang
where lower(FID) = lower(pId);
COMMIT;
end;
.
.
EXCEPTION WHEN ....
.
.
OPEN cresults FOR VALUES ('stringresult');
end;
$BODY$;
ОБНОВЛЕНО
Отредактировано так, что обновление и принятие находятся в блоке, который не имеет никаких исключений.
Ранее он использовался для выполнения процедуры. Я был в состоянии получить результат рефкурсора. Больше не работает после добавления коммита .:
begin;
CALL testupdate('ad3caecb-9235-4945-b37a-9b7ff89fdfe0','aa','138',0,'test','2018/06/29 18:04:03','zh-cn','');
fetch all in cur;
commit;
но когда я выполню с:
CALL testupdate('ad3caecb-9235-4945-b37a-9b7ff89fdfe0','aa','138',0,'test','2018/06/29 18:04:03','zh-cn','');
.. он работает нормально и строка обновлена, но этот способ запуска не позволяет мне получить результат, мой рефкурсор.
Есть ли способ получить результат моего рефкурсора при исключении процедуры с помощью COMMIT. Любая помощь очень ценится. Спасибо