GETIMS 呼び出し (IMS セグメントの検索)

1. Syntax (without a view)
(1)
WHERE clause

1 WHERE
1 CKEY=conkey
1 + 1SEGMENT=segname+  #
2.1 ? layout_ref. field_ref=field_value2
2.1 ? + 3 qualifier .field_name=field_value
注:
  • 1 field_ref または field_name を使用するには、この関数呼び出しの前の VIEWIMS の呼び出しによって、ビューがすでにロードされている必要があります。
  • 2 layout_ref の修飾がない field_ref を指定した場合、field_refsegname セグメントの最初のレイアウトに関連付けられます。
  • 3 field_name を完全修飾するには、指定する最初の qualifier をレイアウト名にする必要があります。レイアウト名が指定されていない場合、FM/IMS は、グループ修飾子と field_name が見つかるまで、相対順序ですべてのレイアウトから segname セグメントを検索します。見つからない場合、エラー・メッセージが表示され、処理が終了します。
CHILD
現行セグメントの階層パス内の次のセグメントを検索します。SEGMENT=getsegm も指定した場合には、GETIMS は現行セグメントの階層パスの中でその名前の次のセグメントを検索します。
conkey
検索するセグメントの連結キー。
field_name
テンプレートまたはビューに指定した、segname セグメント内のキー・フィールドの名前。VIEWIMS DESCRIBE 文節を使用してビューまたはテンプレートを印刷するか、ビューまたはテンプレートをオンラインでブラウズすることで取得できます。
field_ref
レイアウト内のフィールドのフィールド参照番号。VIEWIMS DESCRIBE 文節を使用してビューまたはテンプレートを印刷するか、ビューまたはテンプレートをオンラインでブラウズすることで取得できます。
field_value
field_ref または field_name によって指定したキー・フィールドの値。
FIRST
データベース内の WHERE 文節を満たす最初のセグメントを検索します。
getsegm
検索するセグメントの名前。CHILD も指定した場合には、GETIMS はこの名前を持つ階層内の次の従属セグメントを検索します。指定しない場合のデフォルト値は NEXT であり、GETIMS は階層とは無関係に、 この名前を持つ次のセグメントを検索します。
HOLD
ホールドを持つセグメントを検索します。このパラメーターは、GETIMS 呼び出しの後に、WHERE 文節のない REPLIMS 呼び出しが続くか、WHERE 文節のない DELIMS 呼び出しが続く場合にコーディングします。

このセグメントまたはそのいずれかの親が非固有のキーを持つか、キーを持たない場合、このパラメーターは必須です。これがないと、REPLIMS 呼び出しまたは DELIMS 呼び出しは失敗します。このセグメントおよびその親が固有キーを持つ場合は REPLIMS 呼び出しまたは DELIMS 呼び出しは失敗しませんが、このパラメーターをコーディングすると、EXEC での DL/I 呼び出しの実行回数が減り、EXEC が効率的に実行されるようになります。

layout_ref
segname セグメント内のレイアウトの相対番号。VIEWIMS DESCRIBE 文節を使用してビューまたはテンプレートを印刷することで取得できます。
NEXT
データベース内の現行セグメントの後の次のセグメントを検索します。
PARENT
現行セグメントの親セグメントを検索します。

現行セグメントがルート・セグメントである場合には、GETIMS はその同じセグメントを検索します。この状況がループするのを防ぐために、FMSEGNM REXX 変数を使用して、現行セグメントの名前を検査することができます。

qualifier
フィールド名 (field_name) を特定する 1 つ以上の修飾子。最初の修飾子はセグメント・レイアウト名です。後続の修飾子 (ある場合) は、指定したフィールド名を特定するために使われるグループ・フィールドです。レイアウト名またはグループ・フィールドを省略すると、FM/IMS は指定された修飾子とフィールド名をセグメント・レイアウトから検索します。
注: レイアウト名とグループ・フィールドは、VIEWIMS DESCRIBE 文節を使用してビューまたはテンプレートを印刷するか、ビューまたはテンプレートをオンラインでブラウズすることで取得できます。
ROOT
現行セグメントの階層パス内のルート・セグメントを検索します。
segname
検索するセグメントの階層パス内のセグメントの名前。
TOP
データベース内の最初のルート・セグメントを検索します。
正常に行われればゼロを戻し、そうでなければゼロ以外を戻します。4 の戻りコードは、以下の 1 つの理由によってセグメントが見つからなかったことを示します。
  • WHERE 文節によって指定されたセグメントが存在しません。
  • GETIMS('NEXT') がデータベースの終わりに達しました。
  • GETIMS('CHILD') が階層パスの終わりに達しました (現行セグメントには子がありません)。

FM/IMS で使用不可の HALDB 区画または DEDB 領域が検出された場合、GETIMS 関数は戻りコード 8 を受け取り、ISPF 変数 FMSTATUS は、以下の IMS 状況コードを示します。

FH
使用不可の DEDB 領域。
BA
使用不可の HALDB 区画。

4 でないゼロ以外の戻りコードの場合には、FMSTATUS REXX 変数の DL/I 状況コードを検査して、障害の原因を判別してください。

正常に行われた場合には、GETIMS は検索されたセグメントの内容を INREC および OUTREC REXX 変数に渡します。

IEB の GETIMS 使用例

⋮
$$FILEM IEB
⋮
$$FILEM     PROC=*

filerc = VIEWIMS('TPLDSN=FMN.IMS.IVP.TEMPLATE')

filerc = GETIMS('NEXT')
filerc = GETIMS()

filerc = GETIMS('SEGMENT=NSTREET ',
               ' WHERE SEGMENT=SUBURB #SUBURB-NAME=CITY BEACH ',
                      'SEGMENT=NSTREET #2=FLOREAT BEACH ')

filerc = GETIMS('SEGMENT=NSTREET ',
               ' WHERE CKEY=CITY BEACH        FLOREAT BEACH ')

/+
⋮