M照合順序でその引数によって指定されたノードに続き、そして、データ値を持つレベルの独立している、次の添字ありのローカルまたはグローバル変数ノードの名前を返します。
$QUERY関数のフォーマット:
$Q[UERY](glvn)
添字ありまたは添字なしのグローバルまたはローカル変数名は、$QUERY() がデータ値を持つノードの検索元から開始ノードを指定します。
もし $QUERY() が、指定されたグローバル変数またはローカル変数の後にノードが見つからない場合、それは空の文字列を返します。
もし stdnullcoll で $Data(glvn(""))=1 (or 11), $Query(glvn("")) の場合は、glvn(1)を返します( glvn(1)が存在すると仮定して)。"null" の添字を持つノードを検索するアプリケーションは、glvn("") の存在をテストするために $D(glvn("")) を使用する必要があります。glvn("") が存在する場合であっても、$Q(glvn("...")) は出発点( glvn("") )を返すことはありません。
$QUERY() はデータ値を持つノードの配列全体をスキャンするためのツールとして使用することができます。$QUERY() は、その引数とは異なるレベルを指定して結果を返すことができるため、結果は完全な変数名を提供します。これは、添字の値を返す$ORDER() とは対照的です。ノードでのデータ値にアクセスするには、$ORDER() の戻り値は添字として使用することができますが、$QUERY()の戻り値は間接指定で使用する必要があります。配列が、レベル間ではなく、レベル内で同種類の値を持つ傾向があるため、$QUERY() は、アプリケーションプログラムに比べてユーティリティプログラムのツールとしてより有用です。$QUERY() は、ネストされた$ORDERループを回避するのに役立ちます。
標準は $QUERY() の後にネイキッドリファレンスインジケータの状態を明確に定義していないことに注意してください。$QUERY() の後でGT.Mの中にある間は、ネイキッド レファレンスインジケータは、その結果ではなく、$QUERY() の引数を反映します。
例:
set ^X(1,2,3)="123" set ^X(1,2,3,7)="1237" set ^X(1,2,4)="124" set ^X(1,2,5,9)="1259" set ^X(1,6)="16" set ^X("B",1)="AB"
下のツリー図は、前述のルーチンによって生成された構造を表します。
以下のルーチン:
set y="^X" for set y=$query(@y) quit:y="" write !,y,"=",@y
実行結果:
^X(1,2,3)=123 ^X(1,2,3,7)=1237 ^X(1,2,4)=124 ^X(1,2,5,9)=1259 ^X(1,6)=16 ^X("B",1)=AB
例:
GTM>zwrite lcl lcl("")=1 lcl(1)=1 lcl(1,2)=2 lcl(1,2,"")=3 lcl(1,2,"","")=4 lcl(1,2,"","",4)=5 lcl(1,2,0)=6 lcl(1,2,"abc",5)=7 lcl("x")=1 GTM>set y="lcl" GTM>for set y=$query(@y) quit:y="" write !,y,"=",@y
この例では、以下の結果を生成します:
lcl("")=1 lcl(1)=1 lcl(1,2)=2 lcl(1,2,"")=3 lcl(1,2,"","")=4 lcl(1,2,"","",4)=5 lcl(1,2,0)=6 lcl(1,2,"abc",5)=7 lcl("x")=1
結果はZWRITEの出力と同じであることに注意してください。