文章
姚 鑫 · 二月 16, 2021 阅读大约需 2 分钟

第三十六章 Caché 变量大全 $ZORDER 变量

第三十六章 Caché 变量大全 $ZORDER 变量

包含下一个全局节点的值。

大纲

$ZORDER
$ZO

描述

$ZORDER包含当前全局引用之后的下一个全局节点的值(在$QUERY序列中,而不是$ORDER序列中)。如果没有下一个全局节点,访问$ZORDER将导致<unfined>错误,指示$ZORDER成功访问的最后一个全局节点。

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

示例

下面的示例使用WHILE循环重复调用$ZORDER以遍历一系列下标节点:

/// d ##class(PHA.TEST.SpecialVariables).ZORDER()
ClassMethod ZORDER()
{
    SET ^||a="groceries"
    SET ^||a(1)="fruit"
    SET ^||a(1,1)="apples"
    SET ^||a(1,2)="oranges"
    SET ^||a(3)="nuts"
    SET ^||a(3,1)="peanuts"
    SET ^||a(2)="vegetables"
    SET ^||a(2,1)="lettuce"
    SET ^||a(2,2)="tomatoes"
    SET ^||a(2,1,1)="iceberg"
    SET ^||a(2,1,2)="romaine"
    SET $ZERROR="unset"
    WRITE !,"last referenced: ",^||a(1,1)
    WHILE $ZERROR="unset" {
        WRITE !,$ZORDER 
    }
    QUIT
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZORDER()

last referenced: apples
oranges
vegetables
lettuce
iceberg
romaine
tomatoes
nuts
peanuts

  WRITE !,$ZORDER
          ^
<UNDEFINED>zZORDER+15^PHA.TEST.SpecialVariables.1 ^||a(3,1)

上面的示例从最后引用的全局变量(在本例中是进程私有全局变量)开始:^||a(1,1)$ZORDER不包含^||a(1,1)的值,但从该点开始向前工作。对$ZORDER的调用按以下顺序遍历下标树节点:(1,2),(2),(2,1),(2,1,1),(2,1,2),(2,2),(3),(3,1)。每次写入$ZORDER都会显示每个后续节点中的数据值。然后,它会耗尽节点并生成以下错误:^||a(3,1)。请注意,^||a(3,1)不是未定义的;之所以指定它,是因为$ZORDER在这个全局变量之后找不到另一个全局变量。

00
1 0 0 9