ROLLBACK TO SAVEPOINT

    注意事项

    • 不能回滚到一个未定义的保存点,语法上会报错。
    • 在保存点方面,游标有一些非事务性的行为。任何在保存点里打开的游标都会在回滚掉这个保存点之后关闭。如果一个前面打开了的游标在保存点里面,并且游标被一个FETCH命令影响,而这个保存点稍后回滚了,那么这个游标的位置仍然在FETCH让它指向的位置(也就是FETCH不会被回滚)。关闭一个游标的行为也不会被回滚给撤消掉。如果一个游标的操作导致事务回滚,那么这个游标就会置于不可执行状态,所以,尽管一个事务可以用ROLLBACK TO SAVEPOINT重新恢复,但是游标不能再使用了。

    参数说明

    1. openGauss=# START TRANSACTION;
    2. openGauss=# SAVEPOINT my_savepoint;
    3. openGauss=# ROLLBACK TO SAVEPOINT my_savepoint;
    4. --游标位置不受保存点回滚的影响。
    5. openGauss=# DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;
    6. openGauss=# FETCH 1 FROM foo;
    7. ----------
    8. 1
    9. openGauss=# ROLLBACK TO SAVEPOINT foo;
    10. ?column?
    11. ----------
    12. 2
    13. openGauss=# RELEASE SAVEPOINT my_savepoint;

    相关链接