将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。
在使用时,它表示该保存点是当前事务范围内惟一的保存点。
将用户指定的事务回滚到事务内的上一个保存点或事务开头。
在发生错误的情况下,事务逻辑可以指定该事务回滚到某个保存点。
ROLLBACK语句将失败并收到一个错误:保存点回滚不允许在同一事务中更新较旧的服务器。
当一个事务回滚到某个保存点时,在保存点之后打开的所有未被占用的指针将被关闭。
或者,如果没有使用可选的svpt1标识符,将对当前事务中指定的最近的一个保存点执行回滚。
在指定的SAVEPOINT语句之后获得的所有锁仍然保留,直到事务结束。
因此,保存点的名称只需在其执行范围内保持惟一。
清单3中的示例演示了在一个连接到stores_demo数据库的事务中使用SAVEPOINT语句。
它在插入一个新客户之前设置了一个名为newcustomer的保存点,并在添加新客户的订单之前添加了一个名为neworder的保存点。
如果对较旧的服务器执行更新的话,对保存点执行的任何回滚都会失败。
使用UNIQUE关键字设置另一个名为newcustomer的保存点将生成一个错误。
当使用该语句时,将回滚到发生在svpt1保存点之后的操作。
方法以回滚到保存点,而不是回滚到事务的起点。
SAVEPOINT语句在事务的当前位置设置了一个保存点。
执行了RELEASESAVEPOINT语句或事务结束后,则不能再使用该保存点。
使用其他客户机的应用程序也可以在IDS中使用保存点,只需要将保存点语句直接发送给服务器。
代码设置了一个与过程内部设置的保存点同名的newcustomer保存点。
这个回滚将撤销在设置neworder保存点之后执行的所有操作。
清单5中的示例演示了RELEASESAVEPOINT语句的效果。
使用ROLLBACKTOSAVEPOINT语句可以撤消该点后的所有更改。