3

随着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$;

UPDATED 已编辑,以便更新和提交位于没有任何异常的块内。

这以前用于执行该过程。我能够获取 refcursor 的结果。添加提交后不再起作用。:

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','');

..它运行良好并且行得到了更新,但是这种运行方式不允许我获取我的refcursor的结果。

使用 COMMIT 执行程序时,有什么方法可以得到我的 refcursor 的结果。任何帮助是极大的赞赏。谢谢

4

0 回答 0