テンプレートおよびビューを使用する理由

一般に、アプリケーション・データが入っているデータベースは、データベース内 の各セグメントがいくつかのフィールドから構成される、うまく 定義された構造になっています。それぞれのフィールドには、顧客の名前、製品コード、またはデータベースに保管可能な値など、 それぞれ別個のデータ項目が入っています。このデータはさまざまなタイプにすることができ、 一部のフィールドには文字データが入り、他のフィールドには 2 進数形式または パック 10 進数形式でエンコードされる数値データが入ります。

このようなデータベースを効率的に処理するには、セグメント・レイアウトを認識し、 個々のフィールドを選択して処理することを可能にするツールが必要です。

例えば、IMS テスト・プログラム DFSDDLT0 を使用してアプリケーション・ データベースを印刷すると、各セグメントが文字ストリングとして表示されるため、 セグメントが個々のフィールドから構成されていることは示されません。2 進数フォーマットまたはパック 10 進数フォーマットでエンコードされた数値データの入ったフィールド は、2 行になった 16 進値で表されます。

各フィールドの列の境界がわかっていても、DFSDDLT0 を使用してアプリケーション・データを 保守することは、難しい時間のかかる作業になります。

  • 特定のフィールドのデータを探して置き換えたい場合には、 フィールドの長さを変えないように注意する必要があります。 そうしないと、以降のフィールドの境界が移動されてしまい、 セグメント構造が壊れる可能性があります。
  • データが 2 進数やパック 10 進数でエンコードされている数値フィールドのデータを探して置き換えたい場合には、数値でなくその形式 (通常は 16 進値) で検索値や置き換え値を指定する必要があります。
  • 編集しているデータベースに (それぞれが 1 つまたは いくつかのレイアウトを持つ) いくつかのセグメント・タイプが入っており、1 つのセグメント/レイアウト・タイプのデータだけを検索して 置き換えたい場合には、他のセグメント/レイアウト・タイプを編集作業から除外する必要があります。
上記を説明するため、DFSDDLT0 の実行後に、SDFS に表示された英数字フィールドと数値フィールドの 混合が入っているセグメントを以下に示します。
                                           100003599000015970004282
SEGMENT     =(BROOME              112300666980800170C0011120C005C62)

DBPCB   LEV=01  SEG=SHIRE     RET CODE=    KFDB LEN=0020  KEY FDB=(BROOME              )

........................................................................................

上記のセグメントでは、最後の 2 バイト (X'8622') は、2 進数値フィールドに保管されます。この値と等価の 10 進数は 34338 です。この値を 12151 に変更するには、以下を行う必要があります。

  1. セグメント・データの 16 進値を表示します。
  2. フィールドが占めている桁位置を判別します。
  3. 数値 12151 を等価の 16 進値 (X'2F77') に変換します。
  4. 数値フィールドの古い 16 進値 (X'8622') に新しい値を上書きするか、あるいは CHANGE コマンドを使用して新旧の 16 進値を入れ替えます。

同じセグメントを SNGL 形式で表示すると以下のようになります。

1. データベース・セグメント
 Process   Options   Help
────────────────────────────────────────────────────────────────────────────────
 FM/IMS                      Browse : IMS Database DJ1E
                                             SHOW SUP ON  Scope DB  Format SNGL
 Segment  SHIRE                      Level: 1
 Concatenated key value:  DENMARK
                                                      Top Line is 1    of 9
 Current 01: SHIRE-TOWN
 Ref Field         Typ  Len   Data
   3 SHIRE-NAME    AN    20 K DENMARK
   4 SHIRE-TYPE    AN     1   1
   5 SHIRE-CODE1   ZD     3    305
   6 SHIRE-CODE2   ZD     5      244
   7 SHIRE-YEAR    BI     2     6280
   8 SHIRE-BRICK   PD     8       606363187610
   9 SHIRE-WOODEN  PD     8      2034233224332
  10 SHIRE-SCHOOL  PD     4    3020312
  11 SHIRE-GOLF    BI     2    12608
 ***  End of record  ***


Command ===>                                                       Scroll CSR 
 F1=Help      F2=Format    F3=Exit      F4=CRetriev  F5=RFind     F6=RChange
 F7=Up        F8=Down      F9=Swap     F10=Previous F11=Next     F12=Cancel

FM/IMS では、上記のレコードの SHIRE-GOLF 2 進数値フィールドの数値を 12608 から 12151 に変更するためには、その数値を上書きするか、または次のコマンドを入力します。

CHANGE 12608 12151 #11