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

第四十七章 Caché 变量大全 ^$JOB 变量

第四十七章 Caché 变量大全 ^$JOB 变量

提供系统间IRIS进程(JOB)信息。

大纲

^$JOB(job_number)
^$J(job_number)

参数

  • job_number 输入ObjectScript命令时创建的系统特定OBJ编号。每个活动的InterSystems IRIS进程都有一个唯一的作业号。登录到系统会启动一个作业。在UNIX®系统上,作业号是调用InterSystems IRIS时启动的子进程的PIDJOB_NUMBER必须指定为整数;不支持十六进制值。

描述

可以将^$JOB结构化系统变量用作$DATA$ORDER$QUERY函数的参数,以获取有关本地InterSystems IRIS系统上是否存在InterSystems IRIS作业的信息。

示例

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

作为$DATA的参数

$DATA(^$JOB(job_number))

^$JOB作为$DATA的参数返回一个整数值,该值指示指定的作业是否作为节点存在于^$JOB中。下表显示了$DATA可以返回的整数值。

Value Meaning
0 JOB不存在
1 JOB存在

以下示例测试系统间IRIS进程是否存在。

DHC-APP>SET x=$JOB

DHC-APP>WRITE !,$DATA(^$JOB(x))

1

变量x设置为当前进程的作业号(例如:4294219937)。写入操作返回布尔值1,表示此进程存在。

作为$ORDER的参数

$ORDER(^$JOB(job_number),direction)

^$JOB作为$ORDER的参数,按排序顺序将下一个或上一个^$JOB编号返回到指定的作业编号。如果不存在作为^$JOB节点的此类JOB编号,$ORDER将返回空字符串。

Direction参数指定是否返回下一个或上一个job编号。如果不提供方向参数,InterSystems IRIS会将排序顺序中的下一个job编号返回给指定的job编号。

以下子例程搜索InterSystems IRIS作业表,并将job号存储在名为job的本地数组中。

/// d ##class(PHA.TEST.SpecialVariables).JOB()
ClassMethod JOB()
{
JOB
    SET pid=""
    FOR i=1:1 {
        SET pid=$ORDER(^$JOB(pid))
        QUIT:pid="" 
        SET JOB(i)=pid
    }
    zw JOB
    WRITE "总共job有: ",i
    QUIT
}

DHC-APP>d ##class(PHA.TEST.SpecialVariables).JOB()
JOB(1)=612
JOB(2)=1424
JOB(3)=1972
JOB(4)=5624
JOB(5)=7244
JOB(6)=7864
JOB(7)=7872
JOB(8)=7892
JOB(9)=7920
JOB(10)=8332
JOB(11)=9048
JOB(12)=9084
JOB(13)=9340
JOB(14)=10084
JOB(15)=10112
JOB(16)=10156
JOB(17)=10200
JOB(18)=10212
JOB(19)=10828
JOB(20)=22432
总共job有: 21

作为$QUERY的参数

$QUERY(^$JOB(job_number))

^$JOB作为$QUERY的参数,按排序顺序将下一个^$JOB编号返回到指定的JOB编号。如果^$JOB中没有这样的JOB编号作为节点,则$QUERY将返回空字符串。

以下示例返回InterSystems IRISJOB表中的前两个JOB。请注意间接运算符(@)的用法:

DHC-APP>SET x=$QUERY(^$JOB(""))

DHC-APP> WRITE !,x

^$JOB("612")
DHC-APP>WRITE !,$QUERY(@x)

^$JOB("1424")
00
1 0 0 14
Log in or sign up to continue