在PostgreSQL中提交,保存点,回滚到?

在PostgreSQL中提交,保存点,回滚到?,第1张

概述有人可以向我解释为什么这个函数中的COMMIT会返回EXCEPTION吗? DECLARE XNar CURSOR (forDATE Varchar) IS SELECT NARUCENO, ISPORUKA_ID FROM XDATA_NARUDZBE WHERE TO_CHAR(XDATA_NARUDZBE.DATUM, 'DD.MM.YYYY') = forDATE; 有人可以向我解释为什么这个函数中的COMMIT会返回EXCEPTION吗?
DECLARE  XNar CURSOR (forDATE Varchar) IS    SELECT NARUCENO,ISPORUKA_ID FROM XDATA_NARUDZBE    WHERE TO_CHAR(XDATA_NARUDZBE.DATUM,'DD.MM.YYYY') = forDATE; LastDate  DATE; OutResult INTEGER; curNAR    NUMERIC; curISP    VARCHAR; RXNar     RECORD; BEGIN OutResult := 1; SELECT MAX(DATUM) INTO LastDate FROM XDATA_NARUDZBE;   FOR RXNar IN XNar(TO_CHAR(LastDate,'DD.MM.YYYY')) LOOP   IF (RXNar.NARUCENO <> 0) AND (RXNar.ISPORUKA_ID = 'R01') THEN     UPDATE NARUDZBE SET ISPORUCENO = RXNar.NARUCENO       WHERE NARUDZBE.PP_ID  = RXNar.PP_ID        AND NARUDZBE.ART_ID = RXNar.ART_ID        AND NARUDZBE.ISPORUKA_ID = 'R01';   END IF;  END LOOP; COMMIT; <--- ???? RETURN OutResult; EXCEPTION  WHEN OTHERS THEN   OUTRESulT := 0;   RAISE;       RETURN OutResult;END;

当EXCEPTION块存在于函数中时,为什么我不能使用RolLBACK TO SavePoint?

正如Frank Heikens回答的那样,你不能使用plpgsql在plpgsql存储函数/过程中提交.但是,您可以使用dblink( http://www.postgresql.org/docs/9.0/interactive/contrib-dblink-connect.html)或其他存储过程语言(如plperl(不受信任))解决此问题.看看这个谈到的链接.

http://postgresql.1045698.n5.nabble.com/Re-GENERAL-Transactions-within-a-function-body-td1992810.html

高级别是您使用这些方法之一打开新连接,并在该连接上发出单独的事务.适用于大多数情况并不理想,因为您正在打开新连接,但在大多数用例中可能正常工作.

总结

以上是内存溢出为你收集整理的在PostgreSQL中提交,保存点,回滚到?全部内容,希望文章能够帮你解决在PostgreSQL中提交,保存点,回滚到?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1164823.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存