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

前端之家收集整理的这篇文章主要介绍了在PostgreSQL中提交,保存点,回滚到?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人可以向我解释为什么这个函数中的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

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

原文链接:https://www.f2er.com/postgresql/191953.html

猜你在找的Postgre SQL相关文章