Postgresql
TO(回滾到保存點)處或附近的語法錯誤
以下 sql 是 FUNCTION 的一部分,我想回滾到 rbk SAVEPOINT:
for ptrEnt in entite loop -- positionnement du point de retour pour une entité savepoint rbk; -- purge de la table des redevances de l''entite test := pckg_activ.initredevanceentite(ptrEnt.cod_ent); -- calcul de la redevance test := pckg_activ.calculredevanceentite(ptrEnt.cod_ent); -- controle calcul de la bonne execution pour l''entité if (test = 0) then -- initialisation des departements associes a une entite test := pckg_activ.initdepartement(ptrEnt.cod_ent); -- validation des modifications commit; -- generation de l''etat recapitulatif test := pckg_activ.recapentitegestionnaire(ptrEnt.cod_ent,ficHisto); else rollback TO SAVEPOINT rbk; report := jour + 7; update sav_rdv_date set date_dem = report where cod_ent = ptrEnt.cod_ent; RAISE NOTICE '!!erreur de patrimoine => abandon du traitement pour cette entite'; commit; end if; end loop;
entite是一個已聲明的游標,for 循環位於BEGIN塊中。
我收到錯誤錯誤:
syntax error at or near "TO"
。我認為語法是正確的,它與游標有關嗎?
您不能在 PostgreSQL 函式中使用事務管理語句。
在 v11 中引入的過程中添加了對此的有限支持。
EXCEPTION
但是您可以(隱式)通過在塊中使用子句來使用保存點。所以而不是
LOOP SAVEPOINT a; /* something */ IF /* something else */ THEN ROLLBACK TO SAVEPOINT a; /* still more */ END IF; END LOOP;
你應該使用
LOOP BEGIN /* something */ IF /* something else */ THEN RAISE EXCEPTION 'catchme'; END IF; EXCEPTION WHEN raise_exception THEN /* still more */ END; END LOOP;