ROLLBACK 语句

ROLLBACK 语句用于回退在工作单元或保存点中所作的数据库更改。

调用

此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是可动态准备的可执行语句。

授权

不需要执行任何操作。

语法

Read syntax diagramSkip visual syntax diagramROLLBACKWORK TO SAVEPOINTsavepoint-name

描述

将终止执行 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