包含事务处理的当前嵌套级别。
$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>
错误。
$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
:
/// 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
}
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
递减。
/// 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
}
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。
/// 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
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).TLEVEL2()
transaction level 0
transaction level 3
transaction level 0
以下示例显示,如果$TLEVEL
为0,则TROLLBACK
命令无效:
/// 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
}
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 删除。