美文网首页
第四十六章 Caché 变量大全 ^$GLOBAL 变量

第四十六章 Caché 变量大全 ^$GLOBAL 变量

作者: Cache技术分享 | 来源:发表于2021-02-25 06:46 被阅读0次

    第四十六章 Caché 变量大全 ^$GLOBAL 变量

    提供有关全局变量和进程私有全局变量的信息。

    大纲

    ^$|nspace|GLOBAL(global_name)
    ^$|nspace|G(global_name)
    
    ^$||GLOBAL(global_name)
    ^$||G(global_name)
    

    参数

    • |nspace|[nspace] - 可选-扩展SSVN引用,可以是显式名称空间名称,也可以是隐含名称空间。必须计算为带引号的字符串,该字符串括在方括号([“nspace”])或竖线(|“nspace”|)中。命名空间名称不区分大小写;它们以大写字母存储和显示。
    • global_name 计算结果为包含无下标全局名称的字符串的表达式。全局名称区分大小写。使用^$||global()语法时,与进程专用全局名称相对应的无下标全局名称:^a表示^||a

    描述

    可以将^$GLOBAL用作$DATA$ORDER$QUERY函数的参数,以返回有关当前名称空间(默认名称空间)或指定名称空间中是否存在全局变量的信息。还可以使用^$global返回有关存在进程私有全局变量的信息。

    进程私有全局变量

    可以使用^$global获取有关所有命名空间中是否存在进程私有全局变量的信息。可以将进程专用全局的查找指定为^$||global^$|“^”|global

    例如,要获取有关进程私有全局^||a及其后代的信息,可以指定$DATA(^$||global(“^a”))。进程私有全局变量不是特定于名称空间的,因此在定义进程私有全局变量时,无论当前名称空间如何,此查找都会返回有关^||a的信息。

    请注意,^$GLOBAL不支持在GLOBAL_NAME本身中指定进程专用全局语法。使用进程专用全局语法指定GLOBAL_NAME会导致<NAME>错误。

    参数

    nspace

    此可选参数允许^$GLOBAL查找在另一个命名空间中定义的GLOBAL_NAME。这称为扩展SSVN参考。可以显式地将命名空间名称指定为带引号的字符串文字、变量,也可以通过指定隐含的命名空间来指定。命名空间名称不区分大小写。可以使用方括号语法[“user”]或环境语法|“user”|。Nspace分隔符前后不允许有空格

    可以使用以下方法测试是否定义了命名空间:

    DHC-APP>WRITE ##class(%SYS.Namespace).Exists("USER")
    1
    DHC-APP>WRITE ##class(%SYS.Namespace).Exists("LOSER")
    0
    

    以使用$NAMESPACE特殊变量来确定当前名称空间。更改当前名称空间的首选方式是新建$NAMESPACE,然后设置$NAMESPACE=“nspace ename”

    global_name

    计算结果为包含无下标全局名称的字符串的表达式。全局变量区分大小写。

    • ^$global(“^a”)global_name“^a”在当前名称空间中查找此全局名称及其后代。它不查找进程私有全局“^||a”
    • ^$|"USER"|GLOBAL("^a"):global_name "^a"“user”名称空间中查找此全局名称及其后代。它不查找进程-私有全局"^||a"
      -^$||GLOBAL("^a"):global_name "^a"在所有名称空间中查找进程私有全局"^||a"及其后代。它不查找全"^a"

    示例

    以下示例显示如何将^$GLOBAL用作$DATA$ORDER$QUERY函数的参数。

    作为$DATA的参数

    ^$GLOBAL作为$DATA的参数返回一个整数值,表示指定的全局名称是否作为^$GLOBAL节点存在。下表显示了$DATA可以返回的整数值。

    Value Meaning
    0 全局名称不存在
    1 全局名称是包含数据但没有子代的现有节点。
    10 全局名称是没有数据但具有子代的现有节点。
    11 全局名称是包含数据的现有节点,并且具有子代。

    下面的示例测试当前命名空间中是否存在指定的全局变量:

    /// d ##class(PHA.TEST.SpecialVariables).GLOBAL()
    ClassMethod GLOBAL()
    {
        KILL ^GBL
        WRITE $DATA(^$GLOBAL("^GBL")),!
        SET ^GBL="test"
        WRITE $DATA(^$GLOBAL("^GBL")),!
        SET ^GBL(1,1,1)="subscripts test"
        WRITE $DATA(^$GLOBAL("^GBL"))
    }
    
    DHC-APP>d ##class(PHA.TEST.SpecialVariables).GLOBAL()
    0
    1
    11
    

    下面的示例测试user命名空间中是否存在指定的全局变量:

    /// d ##class(PHA.TEST.SpecialVariables).GLOBAL1()
    ClassMethod GLOBAL1()
    {
        SET $NAMESPACE="USER"
        SET ^GBL(1)="test"
        SET $NAMESPACE="%SYS"
        WRITE $DATA(^$|"USER"|GLOBAL("^GBL"))
    }
    
    DHC-APP>d ##class(PHA.TEST.SpecialVariables).GLOBAL1()
    10
    

    下面的示例测试任何命名空间中是否存在指定的进程私有全局变量:

    /// d ##class(PHA.TEST.SpecialVariables).GLOBAL2()
    ClassMethod GLOBAL2()
    {
        SET $NAMESPACE="USER"
        SET ^||PPG(1)="test"
        SET $NAMESPACE="%SYS"
        WRITE $DATA(^$||GLOBAL("^PPG"))
    }
    
    DHC-APP>d ##class(PHA.TEST.SpecialVariables).GLOBAL2()
    10
    

    作为$ORDER的参数

    $ORDER(^$|nspace|GLOBAL( global_name),direction)

    ^$GLOBAL作为$ORDER的参数,将排序序列中的下一个或上一个全局名称返回到指定的全局名称。如果^$GLOBAL中不存在这样的全局名称节点,$ORDER将返回空字符串。

    注意:$ORDER(^$GLOBAL(NAME))不会从IRISSYS数据库返回%global names

    Direction参数指定是返回下一个全局名称还是返回上一个全局名称。如果不提供方向参数,InterSystems IRIS会将排序顺序中的下一个全局名称返回给您指定的全局名称。

    以下子例程搜索当前名称空间,并将全局名称存储在名为global的本地数组中。

    /// d ##class(PHA.TEST.SpecialVariables).GLOBAL3()
    ClassMethod GLOBAL3()
    {
    GLOB   
        SET NAME=""
        WRITE !,"以下全局变量在 ",$NAMESPACE
        FOR I=1:1 {
            SET NAME=$ORDER(^$GLOBAL(NAME))
            WRITE !,NAME
            QUIT:NAME=""
            SET GLOBAL(I)=NAME
        }
        WRITE !,"全部完成"
        QUIT
    }
    
    DHC-APP>d ##class(PHA.TEST.SpecialVariables).GLOBAL3()
     
    以下全局变量在 DHC-APP
    ^%ISCWorkQueue
    ^%cspSession
    ^%qCacheMsg
    ^%qCacheMsgNames
    ^%qCacheObjectErrors
    ^%qCacheObjectKey
    ^%qCacheObjectQualifier
    ^%qCacheSQL
    ^%qHTMLElementD
    ^%qJavaMetaDictionary
    ^%qMgtPortal.Index
    ^%qPublicSuffix
    ^%qStream
    ^%qcspRule
    ^A
    ^AA
    <INTERRUPT>Visible+4^%SYS.GD
    DHC-APP>
    

    作为$QUERY的参数

    ^$GLOBAL作为$QUERY的参数,按排序顺序将下一个全局名称返回到指定的全局名称。如果^$GLOBAL中不存在这样的全局名称作为节点,则$QUERY将返回空字符串。

    注意:$QUERY(^$GLOBAL(NAME))不会从IRISSYS数据库返回%GLOBAL NAMES

    在以下示例中,用user命名空间中存在三个全局变量(^GBL1^GBL2^GBL3)。

    /// d ##class(PHA.TEST.SpecialVariables).GLOBAL4()
    ClassMethod GLOBAL4()
    {
        NEW $NAMESPACE
        SET $NAMESPACE="USER"
        SET (^GBL1,^GBL2,^GBL3)="TEST"
        NEW $NAMESPACE
        SET $NAMESPACE="%SYS"
        WRITE $QUERY(^$|"USER"|GLOBAL("^GBL1")),!
        WRITE $QUERY(^$|"USER"|GLOBAL("^GBL2"))
        NEW $NAMESPACE
        SET $NAMESPACE="USER"
        KILL ^GBL1,^GBL2,^GBL3
    }
    
    DHC-APP>d ##class(PHA.TEST.SpecialVariables).GLOBAL4()
    ^$|"USER"|GLOBAL("^GBL2")
    ^$|"USER"|GLOBAL("^GBL3")
    

    作为MERGE的参数

    ^$GLOBAL作为MERGE命令的源参数,将全局目录复制到目标变量。Merge将每个全局名称添加为具有空值的目标下标。下面的示例显示了这一点:

       MERGE gbls=^$GLOBAL("")
       ZWRITE gbls
    
    ...
    gbls("^zlgsql")=""
    gbls("^zlgtem")=""
    gbls("^zlgtem1")=""
    gbls("^zlgtem4")=""
    gbls("^zlgtemp")=""
    gbls("^zlgtemp1")=""
    gbls("^zlgtemp3")=""
    gbls("^zlgtemp5")=""
    gbls("^zlgtmp")=""
    gbls("^zlj")=""
    gbls("^zll")=""
    gbls("^zltmp")=""
    gbls("^zmc")=""
    gbls("^znum")=""
    gbls("^zpeterc")=""
    gbls("^zsb")=""
    gbls("^zseq")=""
    gbls("^zstock")=""
    gbls("^ztTmp")=""
    gbls("^ztrap1")=""
    gbls("^zwb1")=""
    gbls("^zwhtmp")=""
    gbls("^zx")=""
    gbls("^zx1")=""
    gbls("^zx2")=""
    gbls("^zxdd")=""
    gbls("^zyb")=""
    gbls("^zyb1")=""
    gbls("^zyb2")=""
    gbls("^zyl")=""
    gbls("^zzTT")=""
    gbls("^zzdt")=""
    gbls("^zzp")=""
    gbls("^zzy")=""
    gbls("^zzz")=""
    

    相关文章

      网友评论

          本文标题:第四十六章 Caché 变量大全 ^$GLOBAL 变量

          本文链接:https://www.haomeiwen.com/subject/rgcyfltx.html