Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

MERGE

グローバル・ノード、もしくはサブツリーをソースから宛先にマージします。

Synopsis

MERGE:pc mergeargument,...
M:pc mergeargument,...

mergeargument には、以下を指定できます。

destination=source

引数

pc オプション — 後置条件式
destination および source マージされるローカル変数、プロセス・プライベート・グローバル、またはグローバル。クラス・プロパティとして指定された場合、source 変数は、多次元の (添え字付き) 変数である必要があります。

概要

MERGE destination=sourcesourcedestination にコピーし、source のすべての下位を destination の下位にコピーします。これは、source を変更したり、destination のノードを削除することはありません。

MERGE コマンドを使用すると、ある変数のサブツリー (複数の添え字) を、別の変数に簡単にコピーできます。変数は、添え字付きのローカル変数、プロセス・プライベート・グローバル、またはグローバルのいずれかです。サブツリーとは、特定の変数の子孫であるすべての変数です。これまで、一連の SET コマンドと $ORDER 参照を組み合わせて行っていたサブツリーのコピーを、MERGE コマンド 1 つで実行できます。

MERGE は、sourcedestination が親子リレーションシップである場合に <COMMAND> エラーを発行します。

MERGE コマンドの実行には、他のほとんどの ObjectScript コマンドよりも時間がかかります。その結果、割り込みを受ける可能性も高くなります。割り込みの影響は、その実装ごとに異なります。Caché では、割り込みによって、コピー先のサブツリーに、ソースから予測できないサブセットがコピーされる可能性があります。

引数

pc

オプションの後置条件式。Caché は、後置条件式が True (0 以外の数値に評価される) の場合に MERGE コマンドを実行します。Caché は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。

destination および source

マージされる変数。変数は、ローカル変数、プロセス・プライベート・グローバル、またはグローバルのいずれかです。destination が未定義の場合、MERGE は定義を行い、source に設定します。source が未定義の場合、MERGE は正常に終了しますが、destination を変更しません。

ユーザは、複数のコンマ区切りの destination=source の組み合わせを指定することができます。これらは、左から右の順に評価されます。

mergeargument は、destination=source ペアを 間接演算で参照できます。例 : MERGE @tMergeString

mergeargument には、myargs... などのように可変個数のパラメータを指定する、参照によって渡される配列を指定できます。

以下の例では、グローバル変数 (^a) から別のグローバル変数 (^b) にサブツリーをコピーします。この場合は、マージの使用によって、より小さいグローバル ^b が作成され、これには ^a にある情報の ^a(1,1) サブツリーのみが含まれます。

   SET ^a="cartoons"
   SET ^a(1)="The Flintstones",^a(2)="The Simpsons"
   SET ^a(1,1)="characters",^a(1,2)="place names"
   SET ^a(1,1,1)="Flintstone family"
   SET ^a(1,1,1,1)="Fred"
   SET ^a(1,1,1,2)="Wilma"
   SET ^a(1,1,2)="Rubble family"
   SET ^a(1,1,2,1)="Barney"
   SET ^a(1,1,2,2)="Betty"
   MERGE ^b=^a(1,1)
   WRITE ^b,!,^b(2),!,^b(2,1)," and ",^b(2,2)

以下の例では、コピー元のグローバル変数のサブツリーが結合された後の、コピー先のグローバル変数を示しています。

以下を実行するとします。

  KILL ^X,^Y
  SET ^X(2,2)="first"
  SET ^X(2,2,4)="second"
  SET ^Y(3,6,7)="third"
  SET ^Y(3,6,8)="fourth"
  SET ^Y(3,6,7,8,4)="fifth"
  SET ^Y(3,6,7,8,9)="sixth"
  WRITE ^X(2,2),!,^X(2,2,4),!
  WRITE ^Y(3,6,7),!,^Y(3,6,8),!
  WRITE ^Y(3,6,7,8,4),!,^Y(3,6,7,8,9)

以下の図は、実行後の ^X と ^Y の論理構造を示しています。

^X と ^Y の初期構造
generated description: cmerge initial

以下の MERGE コマンドを考えてみましょう。

  MERGE ^X(2,3)=^Y(3,6,7,8)

前の文を実行すると、Caché は ^Y の一部を ^X(2,3) にコピーします。グローバル ^X は、以下の図のような構造になります。

^X および ^Y の MERGE コマンドの結果
generated description: cmerge result

メモ

ネイキッド・インジケータ

destination および source の両方がローカル変数である場合、ネイキッド・インジケータは変更されません。source がグローバル変数で、destination がローカル変数の場合は、ネイキッド・インジケータは source を参照します。

source および destination の両方がグローバル変数である場合、ネイキッド・インジケータの状態は、source が未定義 ($DATA(source)=0) であれば変更されません。これ以外の場合 ($DATA(source)=10 の場合)、ネイキッド・インジケータは、SET コマンドを MERGE コマンドと置き換え、source が値を持っているとして実行した場合と同じ値を取ります。ネイキッド・インジケータに関する詳細は、"Caché グローバルの使用法" の "ネイキッド・グローバル参照" を参照してください。

自己マージ

destinationsource が同じ変数のとき、マージは行われず、ジャーナル・ファイルにも何も記録されません。しかし以前のセクションで説明された規定に基づいて、ネイキッド・インジケータは変更されます。

ウォッチポイント

MERGE コマンドはウォッチポイントをサポートしています。MERGE コマンドのウォッチポイントを設定する場合、Caché は、MERGE が監視されている変数の値を変更するたびに、ウォッチポイントをトリガします。ウォッチポイントを設定するには、ZBREAK コマンドを使用します。

関連項目

FeedbackOpens in a new tab