投稿者

Product Support at InterSystems Japan
記事 Megumi Kakechi · 3月 8, 2023 2m read

2つのグローバルの内容を比較する方法

これは InterSystems FAQ サイトの記事です。
 

^%GCMP ユーティリティにて2つのグローバルの内容を比較することができます。

例としてUSERとSAMPLESネームスペースにある、^testと^testを比較する場合は以下のようになります。
※以下の例では、2つのネームスペースに全く同じグローバルを700個作り、その中の一つの中身を変えて検出対象としています。

USER>kill^test// USERネームスペースに、比較元のグローバル作成(削除したあとに作成)
USER>for i=1:1:100 { forj=1:1:7 { set^test(i,j)="テスト"_i } }
 
USER>zn"samples"// SAMPLESネームスペースに、比較先のグローバル作成(削除したあとに作成)
SAMPLES>kill^test
SAMPLES>for i=1:1:100 { forj=1:1:7 { set^test(i,j)="テスト"_i } }
 
SAMPLES>set^test(50,5,1)=1// SAMPLESネームスペースに作成したグローバルの一つを変更
SAMPLES>do^%GCMP
Compare global ^test// 比較したいグローバル
  on directory set: (this system)  // Enter
    in namespace: SAMPLES =>       // Enter(このネームスペースで良ければ)
 with global ^test=>               // 比較相手のグローバル
  on directory set: (this system)  // Enter
    in namespace: SAMPLES => USER  // 比較相手のネームスペース
Output differences on
Device:                            // 結果出力先、ターミナルで見る場合は <Enter> 押下// ※ログファイル名をフルパスで書けば、そちらに出力される
Right margin: 80 =>
 
Compare global ^test in SAMPLES
 with global ^test in USER
 
^test(50,5,1) exists in ^|"SAMPLES"|test but not in ^|"USER"|test    // 相違のあるグローバルを検出
Time=.001822
SAMPLES>


同一インスタンス内ではなく、異なるサーバのインスタンス間での比較を行いたい場合は、^DATACHECKユーティリティを使用します。
^DATACHECKユーティリティの使用方法については、以下の関連記事をご覧ください。
 

enlightened【関連】
2つのデータベースにある複数のグローバルやルーチンを比較する方法