Postgres 11 - процедура COMMIT

С недавним обновлением 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. Любая помощь с благодарностью. Спасибо

0 ответов

Другие вопросы по тегам