第二十四章 Caché 命令大全 TCOMMIT 命令
标记事务成功完成。
重点
- 了解
$TLEVEL - 如果没有当前事务,
ObjectScript TSTART和SQL START TRANSACTION都会启动事务。但是,START TRANSACTION不支持嵌套事务。因此,如果需要(或可能需要)嵌套事务,最好使用TSTART启动事务。
大纲
TCOMMIT:pc
TC:pc
参数
pc - 可选-后置条件表达式。
描述
TCOMMIT标记由相应的TSTART发起的事务的成功结束。
TCOMMIT递减$TLEVEL特殊变量的值。仅当$TLEVEL变为0时,Caché才终止事务。通常这是TCOMMIT被调用的次数与TSTART一样多的时候。直到$TLEVEL=0,嵌套事务期间所做的更改才会提交。
当$TLEVEL已为0时调用TCOMMIT会导致<command>错误。如果在没有事务正在进行时发出TCOMMIT,当TCOMMIT命令的数量大于TSTART命令的数量时,或者在TROLLBACK命令之后发出TCOMMIT,则可能会发生这种情况。相应的$ZERROR值由<command>、错误位置(例如+3^mytest)和数据文字*NoTransaction组成。
参数
pc
可选的后置条件表达式。如果后置条件表达式为TRUE(计算结果为非零数值),则Caché执行该命令。如果后置条件表达式为假(计算结果为零),则Caché不执行该命令。
示例
可以将TCOMMIT与TROLLBACK和TSTART命令一起使用。
注意
嵌套TSTART/TCOMMIT
Caché支持TSTART/TCOMMIT命令的嵌套,这样模块就可以正确地发出它们的TSTART/TCOMMIT对,而独立于调用它们的模块或它们调用的模块中发出的其他TSTART/TCOMMIT。事务的当前嵌套级别由特殊变量$TLEVEL跟踪。事务在发出最外层的匹配TCOMMIT时提交;即,当$TLEVEL返回到0时。
可以通过调用TRolback1回滚单个嵌套事务,也可以通过调用TRolback回滚所有当前事务。TROLLBACK回滚有效的整个事务-无论发出了多少级别的TSTART-并将$TLEVEL设置为0。
网络事务
要同步通过网络完成的事务,请使用ZSYNC命令。
同步提交
TCOMMIT命令请求将该事务中涉及的日志数据刷新到磁盘。是否等待此磁盘写入操作完成是一个可配置选项。
进入管理门户,选择[主页]>[配置]>[兼容性设置]。查看和编辑SynchCommit的当前设置。

当设置为“true”时,TCOMMIT直到日志数据写入操作完成后才完成。当设置为“false”时,TCOMMIT不等待写入操作完成。默认值为“false”。需要重新启动才能使对SynchCommit设置的更改生效。
SQL和事务
CachéObjectScript和SQL TRANSACTION命令完全兼容且可互换,但有以下例外:
如果没有当前事务,ObjectScript TSTART和SQL START TRANSACTION都会启动事务。但是,START TRANSACTION不支持嵌套事务。因此,如果需要(或可能需要)嵌套事务,最好使用TSTART启动事务。如果需要与SQL标准兼容,请使用START TRANSACTION。
CachéObjectScript事务处理为嵌套事务提供有限的支持。SQL事务处理为事务内的保存点提供支持。