ROLLBACK 语句
ROLLBACK 语句用于回退在工作单元或保存点中所作的数据库更改。
调用
此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是可动态准备的可执行语句。
授权
不需要执行任何操作。
语法
描述
将终止执行 ROLLBACK 语句的工作单元,并启动新的工作单元。 将回退工作单元期间对数据库所作的所有更改。
但是,下列语句不受事务控制,它们所作的更改与 ROLLBACK 语句无关:
- SET CONNECTION
- SET ENCRYPTION PASSWORD
- SET EVENT MONITOR STATE
- SET PASSTHRU注: 虽然 SET PASSTHRU 语句不受事务控制,但该语句启动的通路会话受事务控制。
- SET SERVER OPTION
- SET 变量
- 分配给可更新的专用寄存器
序列和标识值的生成不受事务控制。 由 nextval-expression 或通过将行插入到具有标识列的表中而生成和使用的值独立于发出 ROLLBACK 语句。 此外,发出 ROLLBACK 语句不会影响 prevval-expression返回的值,也不会影响 IDENTITY_VAL_LOCAL 函数。
全局变量值的修改不受事务控制。 ROLLBACK 语句不会影响分配给全局变量的值。
- 至 SAVEPOINT
- 指定要执行部分回滚 (ROLLBACK TO SAVEPOINT)。 如果当前保存点级别中没有任何保存点处于活动状态 (请参阅 SAVEPOINT 语句描述中的
规则
部分) ,那么将返回错误 (SQLSTATE 3B502)。 成功回滚后,保存点将继续存在,但任何嵌套的保存点都将释放并且不再存在。 嵌套的保存点 (如果有) 被视为已回滚,然后在回滚到当前保存点的过程中释放。 如果未提供 savepoint-name ,那么将回滚到当前保存点级别中最近设置的保存点。如果省略此子句,那么 ROLLBACK 语句将回滚整个事务。 此外,将释放事务中的保存点。
savepoint-name - 指定要在回滚操作中使用的保存点。 指定的 savepoint-name 不能以“SYS”开头 (SQLSTATE 42939)。 成功执行回滚操作后,指定的保存点将继续存在。 如果保存点名称不存在,那么将返回错误 (SQLSTATE 3B001)。 将撤销自设置保存点以来进行的数据和模式更改。
注意
- 在工作单元的 ROLLBACK 上释放所有挂起的锁定。 所有打开的游标都已关闭。 将释放所有 LOB 定位器。
- 执行 ROLLBACK 语句不会影响更改专用寄存器值的 SET 语句或 RELEASE 语句。
- 如果程序异常终止,那么将隐式回滚工作单元。
- 语句高速缓存受回滚操作影响。
- 对 ROLLBACK TO SAVEPOINT 所产生的游标的影响取决于保存点内的语句
- 如果保存点包含游标所依赖的 DDL ,那么游标将标记为无效。 尝试使用此类游标会导致错误 (SQLSTATE 57007)。
- 否则:
- 如果在保存点中引用了游标,那么该游标将保持打开状态,并位于结果表的下一个逻辑行之前。 (必须在发出定位 UPDATE 或 DELETE 语句之前执行 FETCH。)
- 否则,游标不受 ROLLBACK TO SAVEPOINT 影响 (它保持打开和定位)。
- 在使用
KEEPDYNAMIC YES选项绑定的程序包中准备的动态 SQL 语句在 ROLLBACK 语句之后保留在 SQL 上下文中。 作为在工作单元中回滚的 DDL 操作的结果,可能会再次隐式预编译该语句。 - 在执行回滚操作之后,将从 SQL 上下文中除去与
KEEPDYNAMIC NO绑定的程序包中准备的不活动动态 SQL 语句。 必须先重新准备语句,然后才能在新事务中执行该语句。 - 在 ROLLBACK 期间,下列动态 SQL 语句可能处于活动状态:
- ROLLBACK 语句
- 在其中执行 ROLLBACK 语句的 CALL 语句
- ROLLBACK TO SAVEPOINT 操作将删除在保存点中创建的任何临时表。 如果在保存点 中修改了已创建的临时表,并且该表已定义为未记录,那么将删除该表中的所有行。
- ROLLBACK TO SAVEPOINT 操作将删除保存点中 声明 的任何已声明临时表。 如果在保存点 中修改了已声明的临时表,并且该表已定义为未记录,那么将删除该表中的所有行。
- 所有锁定都保留在 ROLLBACK TO SAVEPOINT 语句之后。
- 在执行 ROLLBACK TO SAVEPOINT 操作之后,将保留所有 LOB 定位器。
示例
删除自上次落实点或回滚以来所作的更改。
ROLLBACK WORK