Postgres 11 - процедура COMMIT - PullRequest
0 голосов
/ 29 июня 2018

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

...