南大通用GBase8s 常用SQL语句(179)

    1. RELEASE SAVEPOINT 语句

使用 RELEASE SAVEPOINT 语句来销毁指定的保存点。RELEASE SAVEPOINT 语句符合 SQL 的 ANSI/ISO 标准。

语法

 

元素

描述

限制

语法

savepoint 

要销毁的保存点的名称

必须在当前的保存点级别中存在

标识符 

用法

限制: 在此语句成功地执行之后,不再可能回滚到指定的保存点(或到 RELEASE SAVEPOINT 语句与指定的保存点之间的任何其他保存点)。

RELEASE SAVEPOINT 语句销毁指定的保存点。还销毁在当前的保存点级别中那个保存点与 RELEASE SAVEPOINT 语句之间的任何保存点设置。然而,在当前的保存点级别中设置早于指定的保存点的保存点继续为活动的。

在下列上下文中,RELEASE SAVEPOINT 语句失败并报错:

  1. 无 SQL 事务是打开的。
  2. 在当前的保存点级别中,不存在带有指定的名称的保存点。
  3. 该语句为触发器的活动的一部分。
  4. 该语句为 XA 事务的一部分。
  5. 启用客户端 API 的 autocommit 事务模式。
  6. 该语句为跨服务器的分布式 SQL 事务的一部分,在该事务中,参与的数据库服务器之一不支持保存点。
  7. 在 DML 语句内调用的 UDR 内发出该语句。

RELEASE SAVEPOINT 销毁的任何保存点的标识符可在同一保存点级别的后续的 SAVEPOINT 语句中重用,即使通过包括 UNIQUE 关键字的 SAVEPOINT 语句设置了该释放的保存点。

由于保存点为程序对象,而不是数据库对象,因此 RELEASE SAVEPOINT 语句对数据库或其系统目录表没有直接的影响。然而,RELEASE SAVEPOINT 可间接地影响用户表和系统目录,如果它更改后续的 ROLLBACK TO SAVEPOINT 操作的作用域,该操作在当前保存点级别的不同部分内,取消对数据库的未提交的更改,如下例所示。

下列程序片断设置名为 sp45 的保存点,然后释放它:

BEGIN WORK;

CREATE DATABASE third_base IN db3 WITH BUFFERED LOG;

SAVEPOINT sp46;

CREATE TABLE tab1 ( col1 INT, col2 CHAR(24));

SAVEPOINT sp45 UNIQUE;

...

CREATE TABLE tab2 ( col1 INT8, col2 LVARCHAR(24000));

SAVEPOINT sp44;

...

RELEASE SAVEPOINT sp45;

ROLLBACK TO SAVEPOINT;

在此示例中 RELEASE SAVEPOINT 语句的作用是销毁两个保存点,sp45 和 sp44。如果仅保留当前的保存点级别中的保存点为 sp46,则后续的 ROLLBACK TO SAVEPOINT 语句取消那些创建了 tab1 和 tab2 的 DDL 语句,并取消对那些在 ROLLBACK 语句之前的表的任何 DML 操作。然而,回滚不取消创建 third_base 数据库的 CREATE DATABASE 语句。没有 RELEASE SAVEPOINT 语句,创建了 tab1 的 CREATE TABLE 语句可能已被取消,因为 GBase 8s 可能已经将 sp44 处理作为 ROLLBACK 语句的 TO SAVEPOINT 子句的缺省的保存点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值