Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

^$GLOBAL (ObjectScript)

グローバルとプロセス・プライベート・グローバルの情報を提供します。

Synopsis

^$|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 を使用して、プロセス・プライベート・グローバル変数が存在するか否かに関する情報を返すこともできます。

グローバル変数の詳細情報は、"グローバルの使用法" の "InterSystems IRIS 多次元ストレージの使用法" を参照してください。

プロセス・プライベート・グローバル

^$GLOBAL を使用して、すべてのネームスペースでプロセス・プライベート・グローバル変数が存在するか否かに関する情報を返すことができます。プロセス・プライベート・グローバルの検索は、^$||GLOBAL または ^$|"^"|GLOBAL のいずれかとして指定できます。

例えば、プロセス・プライベート・グローバル ^||a とその子孫に関する情報を取得するには、$DATA(^$||GLOBAL("^a")) を指定します。プロセス・プライベート・グローバルはネームスペース固有ではないため、この検索では、プロセス・プライベート・グローバルが定義されていれば現在のネームスペースに関係なく、^||a に関する情報が返されます。

^$GLOBAL では、global_name そのものにプロセス・プライベート・グローバル構文を指定することはできないことに注意してください。プロセス・プライベート・グローバル構文で global_name を指定しようとすると、<NAME> エラーが返されます。

引数

nspace

このオプションの引数を使用すると、^$GLOBAL により、別のネームスペースで定義された global_name を検索できます。これを、拡張 SSVN 参照といいます。ネームスペースは、引用符付きの文字列リテラルまたは変数として、明示的にネームスペース名を指定するか、もしくは暗黙のネームスペースを指定します。ネームスペース名は、大文字と小文字を区別しません。括弧付き構文 ["USER"] か、環境構文 |"USER"| のいずれかを使用します。nspace 区切り文字の前後にスペースを使用することはできません。

以下のメソッドを使用して、ネームスペースが定義されているかどうかをテストすることができます。

   WRITE ##class(%SYS.Namespace).Exists("USER"),!  ; an existing namespace
   WRITE ##class(%SYS.Namespace).Exists("LOSER")   ; a non-existent namespace

$NAMESPACE 特殊変数を使用して、現在のネームスペースを決定できます。現在のネームスペースを変更するお勧めの方法は、NEW $NAMESPACE に続けて SET $NAMESPACE="nspacename" を使用することです。

global_name

添え字なしのグローバル名を含む文字列に評価される式。グローバルでは大文字と小文字が区別されます。

  • ^$GLOBAL("^a")global_name "^a" は、現在のネームスペースでこのグローバルとその子孫を検索します。プロセス・プライベート・グローバル "^||a" は検索しません。

  • ^$|"USER"|GLOBAL("^a")global_name "^a" は、"USER" ネームスペースでこのグローバルとその子孫を検索します。プロセス・プライベート・グローバル "^||a" は検索しません。

  • ^$||GLOBAL("^a")global_name "^a" は、すべてのネームスペースでプロセス・プライベート・グローバル "^||a" とその子孫を検索します。グローバル "^a" は検索しません。

以下の例は $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 文字列を返します。

Note:

$ORDER(^$GLOBAL(name)) は、IRISSYS データベースから % グローバル名を返しません。

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 文字列を返します。

Note:

$QUERY(^$GLOBAL(name)) は、IRISSYS データベースから % グローバル名を返しません。

以下の例では、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

関連項目

FeedbackOpens in a new tab