SAVEPOINT 语句

SAVEPOINT语句在恢复单元内设置一个保存点,用于确定恢复单元内可回滚关系数据库更改的时间点。

调用 SAVEPOINT

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

授权 SAVEPOINT

不需要执行任何操作。

语法 SAVEPOINT

阅读语法图跳过可视化语法图SAVEPOINT保存点名称UNIQUEON ROLLBACK RETAIN CURSORS1ON ROLLBACK RETAIN LOCKS1
注意:
  • 1 这些条款可以按任意顺序排列。

描述 SAVEPOINT

savepoint-name
命名保存点。 保存点名称不能以“SYS”开头。
UNIQUE
指定应用程序不能在恢复单元内重复使用保存点名称。 如果恢复单元中已经存在与保存点名称相同的保存点,则会发生错误。

省略 UNIQUE 表示应用程序可以在恢复单元内重用保存点名称。 如果 svpt-name 标识的保存点在恢复单元中已经存在,且该保存点不是使用UNIQUE选项创建的,则现有保存点将被销毁,并创建新的保存点。 销毁一个保存点,将其名称用于另一个保存点,与释放保存点不同。 重用保存点名称只会破坏一个保存点。 使用RELEASE SAVEPOINT语句释放保存点,将释放该保存点以及之后设置的所有保存点。

ON ROLLBACK RETAIN CURSORS
指定在设置保存点后打开的任何光标都不会被跟踪,因此不会在回滚到保存点时关闭。 虽然回滚到保存点后这些光标仍然可用,但可能无法使用。 例如,如果回滚到保存点会导致光标所在行的插入被回滚,使用光标更新或删除该行会导致错误。
ON ROLLBACK RETAIN LOCKS
指定在设置保存点后获得的任何锁都不会被跟踪,因此在回滚到保存点时不会被释放。 回滚时保留锁定是默认行为。

示例 SAVEPOINT

假设您想在恢复单元中的不同位置设置三个保存点。 将第一个保存点命名为A,并允许重用保存点名称。 将第二个保存点命名为B,且不允许重复使用该名称。 当您准备设置第三个保存点时,因为不再需要保存点A,所以请使用保存点A作为保存点的名称。
   SAVEPOINT A ON ROLLBACK RETAIN CURSORS;
       ⋮
   SAVEPOINT B UNIQUE ON ROLLBACK RETAIN CURSORS;
       ⋮
   SAVEPOINT A ON ROLLBACK RETAIN CURSORS;