SAVEPOINT

SAVEPOINT 语句在工作单元中设置保存点,以标识可以回滚关系数据库更改的工作单元中的时间点。

调用

此语句可嵌入应用程序中或者以交互方式发出。 它是可以动态准备的可执行语句。

授权

不需要。

语法

读取语法图跳过可视语法图SAVEPOINTsavepoint-名称UNIQUE ON ROLLBACK RETAIN CURSORS ON ROLLBACK RETAIN LOCKS1
注:
  • 1 可以按任何顺序指定 ROLLBACK 选项。

描述

保存点名称
标识新的 保存点。 指定的 savepoint-name 不能以 "SYS" 开头。
UNIQUE
指定应用程序无法在工作单元中复用保存点名称。 如果工作单元中已存在与 savepoint-name 同名的保存点,那么会发生错误。

省略 UNIQUE 指示应用程序可以在工作单元中复用保存点名称。 如果 savepoint-name 标识了工作单元中已存在的保存点,并且未使用 UNIQUE 选项创建保存点,那么将销毁现有保存点并创建新的保存点。 销毁一个保存点以复用其名称用于另一个保存点与释放保存点不同。 复用保存点名称只会破坏一个保存点。 使用 RELEASE SAVEPOINT 语句释放保存点以及随后设置的所有保存点。

在回滚时保留游标
指定在设置保存点后打开的游标在回滚到保存点时不关闭。
  • 如果对 SAVEPOINT 语句作用域内的表或视图执行 SQL 模式语句,那么将关闭引用该表或视图的任何游标。 在 ROLLBACK TO SAVEPOINT 之后尝试使用此类游标会导致错误。
  • 否则,游标不受 ROLLBACK TO SAVEPOINT 影响 (它保持打开和定位)。
虽然这些游标在回滚到保存点后保持打开状态,但它们可能不可用。 例如,如果回滚到保存点会导致回滚光标所在行的插入,那么使用光标来更新或删除该行会导致错误。
在回滚时保留锁定
指定在设置保存点之后获取的任何锁定都不会在回滚到保存点时释放。

注意

保存点持久性: 在下列情况下,将销毁保存点 S:
  • 执行 COMMIT 或 ROLLBACK (不带 TO SAVEPOINT 子句) 语句。
  • 执行 ROLLBACK TO SAVEPOINT 语句以指定保存点 S 或在工作单元中早于 S 建立的保存点。
  • 执行 RELEASE SAVEPOINT 语句以指定保存点 S 或在工作单元中早于 S 建立的保存点。
  • SAVEPOINT 语句指定与未使用 UNIQUE 关键字创建的现有保存点相同的名称。

对 INSERT 的影响: 在应用程序中,可以缓冲插入。 当发出 SAVEPOINT , ROLLBACK 或 RELEASE TO SAVEPOINT 语句时,将清空缓冲区。

SAVEPOINT 限制: 如果针对激活组的落实控制未处于活动状态,那么不允许 SAVEPOINT 语句。 有关确定使用哪个落实定义的信息,请参阅 COMMIT 语句中的 Notes

示例

假定您要在工作单元中的不同点设置三个保存点。 将第一个保存点命名为 A ,并允许复用保存点名称。 将第二个保存点命名为 B ,并且不允许复用该名称。 因为当您准备好设置第三个保存点时不再需要保存点 A ,所以复用 A 作为保存点的名称。

   SAVEPOINT A ON ROLLBACK RETAIN CURSORS;
   .
   .
   .
   SAVEPOINT B UNIQUE ON ROLLBACK RETAIN CURSORS;
   .
   .
   .
   SAVEPOINT A ON ROLLBACK RETAIN CURSORS;