前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Caché 变量大全 $TLEVEL 变量

Caché 变量大全 $TLEVEL 变量

作者头像
用户7741497
发布2022-05-11 13:58:15
4301
发布2022-05-11 13:58:15
举报
文章被收录于专栏:hml_知识记录

Caché 变量大全 $TLEVEL 变量

包含事务处理的当前嵌套级别。

大纲

代码语言:javascript
复制
$TLEVEL
$TL

描述

$TLEVEL包含当前事务级别,即嵌套的打开事务数。发出的TSTART命令的数量决定了事务级别。

  • 每个TSTART$TLEVEL加1。
  • 每个TCOMMIT$TLEVEL递减1。
  • 每个TROLBACK 1$TLEVEL递减1。
  • ROLLBACK$LEVEL重置为0。

$TLEVEL为0不能递减。当$TLEVEL=0时发出回滚(或回滚1)不执行任何操作。当$TLEVEL=0时发出TCOMMIT会导致<COMMAND>错误。

最大事务级别数为255。尝试超过255个事务级别会生成<Transaction Level>错误。

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

SQL和$TLEVEL

$TLEVEL还由SQL TRANSACTION语句设置,如下所示:

  • 初始START TRANSACTION$TLEVEL设置为1。其他START TRANSACTION语句对$TLEVEL没有影响。
  • 每个SAVEPOINT语句将$TLEVEL递增1。
  • ROLLBACK TO SAVEPOINT POINTNAME语句会递减$TLEVEL。递减量取决于指定的保存点。
  • COMMIT会将$TLEVEL重置为0。
  • 回滚会将$TLEVEL重置为0。

尽管它们共享使用$TLEVEL,但ObjectScript事务处理不同于SQL事务处理,并且与SQL事务处理不兼容。应用程序不应尝试在同一事务中混合使用这两种类型的事务处理语句。

事务级别和终端提示

默认情况下,如果在从终端提示执行的命令行或程序结束时$TLEVEL大于0,则当前事务级别显示为终端提示前缀。

  • $TLEVEL = 0时,终端提示将显示名称空间名称(默认情况下)。例如,USER>
  • $TLEVEL> 0时,终端提示在名称空间名称之前显示TLn:前缀,n为1到255之间的整数。例如TL4:USER>

ZNSPACE中所述,此终端提示显示是可配置的。

SQL Shell提示符不显示当前事务级别。退出SQL Shell后,当前$TLEVEL值将显示在终端提示下。这可以包括在输入SQL Shell之前建立的事务级别以及在SQL Shell中发生的事务级别更改。

MV命令(不带参数)进入交互式MultiValue Shell,并立即回滚所有未完成的事务。退出MultiValue Shell后,当前$TLEVEL值为0。带有MultiValue命令行参数的MV命令不会影响当前事务级别。

示例

下面的示例显示每个TSTART递增$TLEVEL,每个TCOMMIT递减$TLEVEL

代码语言:javascript
复制
/// d ##class(PHA.TEST.SpecialVariables).TLEVEL()
ClassMethod TLEVEL()
{
    WRITE !,"transaction level ",$TLEVEL  // 0
    TSTART
    WRITE !,"transaction level ",$TLEVEL  // 1
    TSTART
    WRITE !,"transaction level ",$TLEVEL  // 2
    TCOMMIT
    WRITE !,"transaction level ",$TLEVEL  // 1
    TCOMMIT
    WRITE !,"transaction level ",$TLEVEL  // 0
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SpecialVariables).TLEVEL()
 
transaction level 0
transaction level 1
transaction level 2
transaction level 1
transaction level 0

以下示例显示,重复调用TSTART会使$TLEVEL递增,而TROLLBACK 1会使$TLEVEL递减。

代码语言:javascript
复制
/// d ##class(PHA.TEST.SpecialVariables).TLEVEL1()
ClassMethod TLEVEL1()
{
    WRITE !,"transaction level ",$TLEVEL  // 0
    TSTART
    WRITE !,"transaction level ",$TLEVEL  // 1
    TSTART
    WRITE !,"transaction level ",$TLEVEL  // 2
    TROLLBACK 1
    WRITE !,"transaction level ",$TLEVEL  // 1
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SpecialVariables).TLEVEL1()
 
transaction level 0
transaction level 1
transaction level 2
transaction level 1
TL1:DHC-APP>

下面的示例显示,重复调用TSTART会使$TLEVEL递增,而TROLLBACK会将$TLEVEL重置为0。

代码语言:javascript
复制
/// d ##class(PHA.TEST.SpecialVariables).TLEVEL2()
ClassMethod TLEVEL2()
{
    WRITE !,"transaction level ",$TLEVEL  // 0
    TSTART
    TSTART
    TSTART
    WRITE !,"transaction level ",$TLEVEL  // 3
    TROLLBACK
    WRITE !,"transaction level ",$TLEVEL  // 0
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SpecialVariables).TLEVEL2()
 
transaction level 0
transaction level 3
transaction level 0

以下示例显示,如果$TLEVEL为0,则TROLLBACK命令无效:

代码语言:javascript
复制
/// d ##class(PHA.TEST.SpecialVariables).TLEVEL3()
ClassMethod TLEVEL3()
{
    WRITE !,"transaction level ",$TLEVEL  // 0
    TROLLBACK
    WRITE !,"transaction level ",$TLEVEL  // 0
    TROLLBACK 1
    WRITE !,"transaction level ",$TLEVEL  // 0
    TROLLBACK
    WRITE !,"transaction level ",$TLEVEL  // 0
}
代码语言:javascript
复制
DHC-APP> d ##class(PHA.TEST.SpecialVariables).TLEVEL3()
 
transaction level 0
transaction level 0
transaction level 0
transaction level 0

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Caché 变量大全 $TLEVEL 变量
  • 大纲
  • 描述
    • SQL和$TLEVEL
    • 事务级别和终端提示
    • 示例
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档