COMMIT 语句

COMMIT 语句终止工作单元,并落实该工作单元所做的数据库更改。

调用

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

权限

不需要执行任何操作。

语法

Read syntax diagramSkip visual syntax diagramCOMMITWORK

描述

将终止执行 COMMIT 语句的工作单元,并启动新的工作单元。 将落实工作单元期间执行的以下语句所做的所有更改: ALTER , COMMENT , CREATE , DROP , GRANT , LOCK TABLE , REVOKE , SET INTEGRITY 和数据更改语句 (INSERT , DELETE , MERGE 和 UPDATE) ,包括那些嵌套在查询中的语句。

但是,下列语句不受事务控制,它们所作的更改独立于 COMMIT 语句:

  • SET CONNECTION
  • SET ENCRYPTION PASSWORD
  • SET EVENT MONITOR STATE
  • SET PASSTHRU
    注: 虽然 SET PASSTHRU 语句不受事务控制,但该语句启动的通路会话受事务控制。
  • SET SERVER OPTION
  • SET 变量
  • 分配给可更新的专用寄存器

将释放工作单元在启动后获取的所有锁定,但声明为 WITH HOLD 的打开游标的必需锁定除外。 所有未定义 WITH HOLD 的打开游标都已关闭。 定义为 WITH HOLD 的打开游标保持打开,并且光标位于结果表的下一个逻辑行之前。 (必须在发出定位 UPDATE 或 DELETE 语句之前执行 FETCH。) 将释放所有 LOB 定位器。 请注意,即使当定位器与通过具有 WITH HOLD 属性的游标检索的 LOB 值相关联时,也是如此。

在使用 KEEPDYNAMIC YES 选项绑定的程序包中准备的动态 SQL 语句保留在 SQL 上下文中的 COMMIT 语句之后。 这是缺省行为。 作为在工作单元中回滚的 DDL 操作的结果,可能会再次隐式预编译该语句。 在 COMMIT 之后,将从 SQL 上下文中除去与 KEEPDYNAMIC NO 绑定的程序包中准备的不活动动态 SQL 语句。 必须先重新准备语句,然后才能在新事务中执行该语句。

将释放事务中设置的所有保存点。

以下语句的行为与其他数据定义语言 (DDL) 和数据控制语言 (DCL) 语句不同。 在落实语句之前,这些语句所做的更改不会生效,即使对于发出该语句的当前连接也是如此。 任何应用程序一次只能发出这些语句中的一个,并且在任何一个工作单元内只允许发出这些语句中的一个。 每个语句必须后跟 COMMIT 或 ROLLBACK 语句,然后才能发出这些语句中的另一个语句。

  • CREATE SERVICE CLASS、ALTER SERVICE CLASS 或 DROP (SERVICE CLASS)
  • CREATE THRESHOLD、ALTER THRESHOLD 或 DROP (THRESHOLD)
  • CREATE WORK ACTION、ALTER WORK ACTION 或 DROP (WORK ACTION)
  • CREATE WORK CLASS、ALTER WORK CLASS 或 DROP (WORK CLASS)
  • CREATE WORKLOAD、ALTER WORKLOAD 或 DROP (WORKLOAD)
  • GRANT(工作负载权限)或 REVOKE(工作负载权限)

注意

  • 强烈建议每个应用程序进程在终止之前显式结束其工作单元。 如果应用程序在没有 COMMIT 或 ROLLBACK 语句的情况下正常结束,那么数据库管理器将根据应用程序环境尝试落实或回滚。
  • 有关 COMMIT 对高速缓存的动态 SQL 语句的影响的信息,请参阅 EXECUTE
  • 有关 COMMIT 对已创建临时表的潜在影响的信息,请参阅 CREATE GLOBAL TEMPORARY TABLE
  • 有关 COMMIT 对已声明临时表的潜在影响的信息,请参阅 DECLARE GLOBAL TEMPORARY TABLE
  • 在 COMMIT 期间,下列动态 SQL 语句可能处于活动状态:
    • 打开 WITH HOLD 游标
    • COMMIT 语句
    • 执行 COMMIT 语句的 CALL 语句

示例

落实自上次落实点以来对数据库进行的更改。
   COMMIT WORK