概要
^$GLOBAL を $DATA 関数、$ORDER 関数、および $QUERY 関数に対する引数として使用し、現在のネームスペース (既定)、あるいは指定したネームスペースにグローバル変数が存在するか否かに関する情報を返すことができます。また、^$GLOBAL を使用して、プロセス・プライベート・グローバル変数が存在するか否かに関する情報を返すこともできます。
グローバル変数の詳細情報は、"グローバルの使用法" の "InterSystems IRIS 多次元ストレージの使用法" を参照してください。
プロセス・プライベート・グローバル
^$GLOBAL を使用して、すべてのネームスペースでプロセス・プライベート・グローバル変数が存在するか否かに関する情報を返すことができます。プロセス・プライベート・グローバルの検索は、^$||GLOBAL または ^$|"^"|GLOBAL のいずれかとして指定できます。
例えば、プロセス・プライベート・グローバル ^||a とその子孫に関する情報を取得するには、$DATA(^$||GLOBAL("^a")) を指定します。プロセス・プライベート・グローバルはネームスペース固有ではないため、この検索では、プロセス・プライベート・グローバルが定義されていれば現在のネームスペースに関係なく、^||a に関する情報が返されます。
^$GLOBAL では、global_name そのものにプロセス・プライベート・グローバル構文を指定することはできないことに注意してください。プロセス・プライベート・グローバル構文で global_name を指定しようとすると、<NAME> エラーが返されます。
例
以下の例は $DATA、$ORDER、$QUERY 関数に対して、^$GLOBAL を引数として使用する方法を表しています。
$DATA に対する引数としての ^$GLOBAL
^$GLOBAL は $DATA に対する引数として、指定するグローバル名が ^$GLOBAL ノードとし存在するか否かを示す整数値を返します。以下のテーブルは、$DATA が返すことができる整数値を示しています。
値 |
意味 |
0 |
グローバル名が存在しない |
1 |
グローバル名は下位ノードを持たない、データを持つ既存のノード |
10 |
グローバル名は下位ノードを持つ、データなしの既存のノード |
11 |
グローバル名は下位ノードを持つ、データを持つ既存のノード |
以下の例は、現在のネームスペースに指定したグローバル変数が存在するかどうかをテストしています。
KILL ^GBL
WRITE $DATA(^$GLOBAL("^GBL")),!
SET ^GBL="test"
WRITE $DATA(^$GLOBAL("^GBL")),!
SET ^GBL(1,1,1)="subscripts test"
WRITE $DATA(^$GLOBAL("^GBL"))
これは 0、1、11 を順番に返します。
以下の例は、USER ネームスペースに指定したグローバル変数が存在するかどうかをテストしています。
SET $NAMESPACE="USER"
SET ^GBL(1)="test"
SET $NAMESPACE="%SYS"
WRITE $DATA(^$|"USER"|GLOBAL("^GBL"))
これは、10 を返します。
以下の例は、任意のネームスペースに指定したプロセス・プライベート・グローバル変数が存在するかどうかをテストしています。
SET $NAMESPACE="USER"
SET ^||PPG(1)="test"
SET $NAMESPACE="%SYS"
WRITE $DATA(^$||GLOBAL("^PPG"))
これは、10 を返します。
$ORDER に対する引数としての ^$GLOBAL
$ORDER(^$|nspace|GLOBAL( global_name),direction)
^$GLOBAL は $ORDER に対する引数として、指定したグローバル名に対する照合順序で、次または前のグローバル名を返します。そのようなグローバル名ノードが ^$GLOBAL に存在しない場合は、$ORDER は NULL 文字列を返します。
direction 引数は、次のグローバル名を返すか、前のグローバル名を返すかを指定します。direction 引数を指定しない場合、InterSystems IRIS は、指定したグローバル名に対する照合順序で、次のグローバル名を返します。詳細は、"$ORDER" 関数を参照してください。
以下のサブルーチンは、現在のネームスペースを検索し、GLOBAL というローカル配列にグローバル名を格納します。
GLOB
SET NAME=""
WRITE !,"The following globals are in ",$NAMESPACE
FOR I=1:1 {
SET NAME=$ORDER(^$GLOBAL(NAME))
WRITE !,NAME
QUIT:NAME=""
SET GLOBAL(I)=NAME
}
WRITE !,"All done"
QUIT
$QUERY に対する引数としての ^$GLOBAL
^$GLOBAL は $QUERY に対する引数として、指定したグローバル名に対する照合順序で、次のグローバル名を返します。そのようなグローバル名が ^$GLOBAL のノードとして存在しなければ、$QUERY は NULL 文字列を返します。
以下の例では、3 つのグローバル (^GBL1、^GBL2、^GBL3) が、USER ネームスペースに存在します。
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
最初の WRITE は ^$|"USER"|GLOBAL("^GBL2") を返します。
2 番目の WRITE は ^$|"USER"|GLOBAL("^GBL3") を返します。
MERGE に対する引数としての ^$GLOBAL
MERGE コマンドの source 引数として ^$GLOBAL を使用すると、グローバル・ディレクトリが destination 変数にコピーされます。MERGE は、各グローバル名を、NULL 値を持つ destination 添え字として追加します。以下に例を示します。
MERGE gbls=^$GLOBAL("")
ZWRITE gbls