在PostgreSQL中提交,保存点,回滚到?
发布时间:2020-12-13 16:14:56 所属栏目:百科 来源:网络整理
导读:有人可以向我解释为什么这个函数中的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 INTEG
有人可以向我解释为什么这个函数中的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 高级别是您使用这些方法之一打开新连接,并在该连接上发出单独的事务.适用于大多数情况并不理想,因为您正在打开新连接,但在大多数用例中可能正常工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读