バージョン 8.1.3
 —  コマンドリファレンス  —

フォーマットバッファ

フォーマットバッファには、Adabas 読み込みコマンドまたは更新コマンドの実行中に処理するフィールドを指定します。 フォーマットバッファには、バッファ自体の末尾の(.)も含め、関連プログラムに含まれている最長のフィールド定義を保持できるだけの十分な長さが必要です。

フォーマットバッファはレコードバッファとペアで使用され、さらに ACBX インターフェイスダイレクトコールではマルチフェッチバッファともペアで使用されます。 フォーマットバッファを指定する場合は、レコードバッファも指定する必要があります。 レコードバッファを指定しないと、フォーマットバッファのペアとなるダミーのレコードバッファ(長さゼロ)が作成されます。

ACBX ダイレクトコールインタフェースを使用する場合、Adabas ダイレクトコールに複数のフォーマットバッファを指定できます。

ACBX インターフェイスダイレクトコールでは、マルチフェッチバッファセグメントも指定できます。 詳細については、「レコードバッファ」および「マルチフェッチバッファ」を参照してください。

それぞれのタイプの ABD またはバッファ間の関係については、「バッファタイプ間の関係」を参照してください。

このドキュメントでは、次のトピックについて説明します。


フォーマットバッファ構文

フォーマットバッファは 2 つの部分に分かれています。バッファのオプションフィールド選択条件と、想定されるレコードフォーマットです。

多様なレコードフォーマットをもつファイルに対しては、フォーマットバッファに複数のレコードフォーマットを指定できます。 どのレコードフォーマットを使用するかは、ファイルのフィールド値によって決まります(例えば、レコードタイプ)。 複数のレコードフォーマットを指定する場合、各レコードフォーマットの前にフォーマット選択条件を指定する必要があります。

フォーマットバッファの構文は次のとおりです。

{[field-selection-criteria1] record-format1}[,{[field-selection-criteria2] record-format2}]... .

各フォーマットバッファエントリは、コンマ(,)で区切る必要があります。 各エントリ間に 1 つ以上の空白があってもかまいません。 最後のエントリの後には、コンマを付けないでください。

フォーマットバッファはピリオドで終了する必要があります。

次のセクションでは、この構文のコンポーネントについて説明します。

Top of page

フィールドの選択条件

フィールド選択条件は、フォーマットバッファではオプションです。 フィールド選択条件を使用すると、レコードフォーマットをフィールドの特定の値に制限できます。 フィールド選択条件の構文は次のとおりです。

(field-name operator value1 [, value2]...)
field-name

フィールド選択条件に使用するフィールド名は、読み込まれる Adabas ファイルの FDT にあるフィールドの有効な名前である必要があります。 次の値を指定することはできません

また、NU または NC/NN オプションで指定したフィールドは空値以外の値である必要があります。空値であると、選択条件が偽になります。

operator

次の表は、フォーマットバッファフィールド選択条件に使用できる演算子のリストです。

演算子 説明
EQ 等しい
= 等しい
NE 等しくない
LT より小さい
< より小さい
GT より大きい
> より大きい
LE より小さいまたは等しい
GE より大きいまたは等しい
value

値は、整数または英数字にする必要があります。

EQ または = 演算子を使用する場合は、一連の値をコンマで区切って指定できます。 英数字は引用符で囲みます(例えば 'value')。

次に例を示します。

(SA = 1) record-format-1, (SA = 2,3,4) record-format-2, (SA GE 4) record-format-3.

フィールド選択条件は次のとおりです。

最初に一致した条件が使用されます。 いずれの条件も一致しない場合、レスポンスコードが返されます。 上記の例では、SA フィールドの値が "4" の場合、フィールド選択条件の最後の 2 つが一致します。 ただし、レコードフォーマット 2 が最初に一致する条件であるため、レコードフォーマット 3 ではなくレコードフォーマット 2 が常に使用されます。 同じく、SA フィールドの値が "0" の場合、レスポンスコードが返されます。

Top of page

レコードフォーマットの指定

レコードフォーマットは必須であり、Adabas ダイレクトコールでどのフィールドを読み込むか、または更新するかを示すのに使用します。

レコードフォーマットの構文は次のとおりです。

Record Format Syntax

レコードフォーマットの構文

この構文の各エレメントについては、次の表に示すセクション(このセクション内)を参照してください。

構文要素 参照先
field field 構文
length 長さおよびデータフォーマット
data-format 長さおよびデータフォーマット
field-name - field-name フィールドの連続表記
nX スペース表記(nX)
'text' テキスト挿入表記

field 構文

レコードフォーマット構文の field の構文は次のとおりです。

Field Syntax

フィールド構文

このセクションでは、このフィールド構文に関連する次のトピックを取り上げています。

field-name 指定

field-name は値、範囲、またはカウントを要求したり、新しい値を提供したりするフィールドまたはグループの名前です。 指定した名前は 2 文字で、Adabas ダイレクトコールで読み込むかまたは更新されるファイルの FDT に存在している必要があります。 この名前でエレメンタリフィールド、サブフィールド、スーパーフィールド、マルチプルバリューフィールド、グループ、またはピリオディックグループを参照できます。

フィールド名でグループを参照すると、グループ内の全フィールドが参照されます。 グループ名を使用すると、コマンド処理に必要な時間を短縮できます。 グループ名は、グループにマルチプルバリューフィールドまたは可変長フィールド(標準長なし)が含まれている場合には指定できません。

読み込みコマンドで同一名を複数指定すると、 フィールド値が複数回返されます。

更新コマンドでは同一名を複数指定できません(ただし以降で説明するようにマルチプルバリューフィールドの場合は除く)。

サブフィールド、スーパーフィールド、サブディスクリプタ、またはスーパーディスクリプタの名前は読み込みコマンドには指定できますが、更新コマンドには指定できません。

次の表は、指定可能な単一値のフィールドタイプとコマンドタイプとの関係を示しています。

コマンドタイプ フィールド サブフィールド スーパーフィールド DE SUBDE SUPERDE COLDE
読み込み(Ln1 3
追加(Nn × × × × ×
検索(Sn
更新(A1/4) 2 × × × × ×

注意:

  1. 圧縮形式のレコードを要求する読み込みコマンドとともに C フォーマットを使用できます。
  2. 更新コマンドに指定したフィールドは繰り返すことができません。また、フィールドには "1-N" 形式の指定を含めることができず、グループに含まれているグループおよびエレメント(フィールドまたはグループ)を指定できません。
  3. 照合ディスクリプタ(COLDE)は、ユーザー出口でデコードオプションが指定されている場合に限り、L9 コマンドのフォーマットバッファに指定できます。 この場合、インデックス値ではなく、元のフィールド値が返されます。

インデックスまたは範囲の表記(i [-j] 表記)

以下は、マルチプルバリューフィールドまたはピリオディックグループのオカレンスを選択するフィールド名形式です。

field-name i[-j]

上記の意味は次に示すとおりです。

i ピリオディックグループまたはマルチプルバリューのオカレンス。
i-j ピリオディックグループまたはマルチプルバリューのオカレンス範囲。

ピリオディックグループ名には、数字など適切な接尾辞を付ける必要があります(詳細については、「カウントインジケータ(C)」および「最高オカレンス/値インジケータ(N)」参照)。 ピリオディックグループ名をフィールド名のみで指定することはできません。

マルチプルバリューフィールドを指定するには、特定の値(インデックス)を明示的に指定するか、または各値を順番に参照して Adabas がその順番に基づいてインデックスを割り当てることができるようにします。 詳細については、「マルチプルバリューフィールド」を参照してください。

選択される内容
ZZ3 マルチプルバリューフィールド ZZ の 3 番目の値。ピリオディックグループ ZZ の第 3 オカレンスの値。ピリオディックグループの第 3 のオカレンス内に存在する(単一またはマルチプルバリューフィールド)ZZ の最初のオカレンスの値。
ZZ3-6 マルチプルバリューフィールド ZZ の 3~6 番目の値。ピリオディックグループ ZZ の第 3~6 のオカレンスの値。ピリオディックグループの第 3~6 のオカレンス内に存在する(単一またはマルチプルバリュー)フィールド ZZ の最初のオカレンスの値。

ピリオディックグループ参照

ピリオディックグループ(またはピリオディックグループ内のフィールド)を参照する場合、どのオカレンスを参照するかを指定する必要があります。 これは、1~3 桁のインデックス(値 1~191、先行のゼロ可)を名前に付けて表示します。

以下に例を示します。

注意:
このセクションで説明する例では、「例で使用されているファイル定義」に記載した Adabas ファイル定義を引用しています。

  1. ピリオディックグループのオカレンスはすべて、グループ名とオカレンス番号で識別できます。

    選択される内容
    GB3 ピリオディックグループ GB の 3 番目のオカレンス(フィールド BA3、BB3、BC3)。
  2. 1 つ以上のピリオディックグループ内のフィールドを選択すると、フィールド名とオカレンス(値)が使用されます。グループ名は暗黙のうちに使用されます。

    選択される内容
    BB06 フィールド BB の 6 番目のオカレンス。
  3. ピリオディックグループ(またはピリオディックグループ内のフィールド)のある範囲のオカレンスを参照するには、ピリオディックグループまたはフィールド名を入力し、その後に最初と最後のオカレンス番号をハイフンでつないで入力します。 オカレンス番号は昇順にする必要があります。降順の範囲は許可されていません。

    選択される内容
    GB2-4 ピリオディックグループ GB の第 2 から第 4 オカレンスおよびこれらのオカレンス内のすべてのフィールドを参照します(BA2、BB2、BC2、BA3、BB3、BC3、BA4、BB4、BC4)。
    BA2-4,BC2-4 BA と BC の第 2 から第 4 オカレンスを参照します(BA2、BA3、BA4、BC2、BC3、BC4)。

マルチプルバリューフィールド

フォーマットバッファにマルチプルバリューフィールドを指定するには、特定の値(インデックス)を明示的に指定するか、または各値を順番に参照して Adabas がその順番に基づいてインデックスを割り当てることができるようにします。 この 2 つの方法は、マルチプルバリューフィールドから得られたサブディスクリプタまたはスーパーディスクリプタにも適用されます。

注意:
このセクションで説明する例では、「例で使用されているファイル定義」に記載した Adabas ファイル定義を引用しています。

  1. インデックス:マルチプルバリューフィールドの特定の値を参照するには、フィールド名の後に 1~3 桁のインデックス(値 1~191、先行のゼロ可)を入力します。

    選択される内容
    MF2 マルチプルバリューフィールド MF の 2 番目の値を参照します。
    MF1,MF10 マルチプルバリューフィールド MF の 1 番目の値と 10 番目の値を参照します。

    マルチプルバリューフィールドのある範囲の値を参照するには、最初と最後の値をハイフンでつなぎ、フィールド名の直後に指定します。 降順範囲は指定できません。

    選択される内容
    MF1-3 マルチプルバリューフィールド MF の 1 番目から 3 番目までの値を参照します。
  2. 順番:フィールド名を繰り返してマルチプルバリューフィールドを参照するには、まず最初の値を指定し、次に 2 番目の値を指定します。以後、同じように指定します。

    選択される内容
    MF,MF マルチプルバリューフィールド MF の 1 番目の値と 10 番目の値を参照します。
    AA,MF,AB,MF,AC,MF フィールド AA、AB、AC とともにマルチプルバリューフィールド MF の 1 番目から 3 番目の値が参照されます。

マルチプルバリューフィールド値を参照するのに、同一フォーマットバッファで上記 2 つの方法を両方とも使用できます。 オカレンスインデックスを指定しない場合は、最終オカレンスより 1 つ大きく、左から右に進むオカレンスが割り当てられます。 最後のインデックスとして、"N" または "N-1" が指定されており、このインデックスが現在の最高オカレンスを参照している場合、インデックスを明示的に指定しない新しいフィールド指定では、最後の指定として同一オカレンスを参照します。 最高オカレンス/値インジケータ N/1-N/NC の詳細については、「最高オカレンス/値インジケータ(N)」を参照してください。

更新コマンドで、マルチプルバリューフィールドへのすべてのフォーマットバッファ参照をインデックスではなく順番で指定した場合、指定したオカレンスのみがレコードに残り、それ以外のオカレンスは削除されます。 マルチプルバリューフィールドへのいずれかの参照をインデックスで指定した場合は、指定したオカレンスのみが変更され、それ以外のオカレンスは変わりません。

ピリオディックグループ内のマルチプルバリューフィールド

マルチプルバリューフィールドがピリオディックグループ内に存在している場合、マルチプルバリューフィールド名を指定すると、ピリオディックグループ名が暗黙的に使用されます。 このため、グループ名を指定する必要はなく、グループオカレンスまたはオカレンス範囲のみを指定できます。 1 つのピリオディックグループオカレンスまたはオカレンス範囲内のマルチプルバリューフィールドまたはフィールド範囲を選択するための一般形式は次のとおりです。

field-name i[-j] (i[- j])

上記の意味は次に示すとおりです。

i ピリオディックグループのオカレンス
i-j ピリオディックグループのオカレンス範囲
( i ) マルチプルバリューフィールド値
( i-j ) マルチプルバリューフィールド値の範囲

以下に例を示します。

注意:
このセクションで説明する例では、「例で使用されているファイル定義」に記載した Adabas ファイル定義を引用しています。

  1. ピリオディックグループ内のマルチプルバリューフィールドを参照する場合、フィールド名の後にピリオディックグループのオカレンス番号を入力し、その後に求めるマルチプルバリューフィールド値または値の範囲をカッコで囲んで指定します。

    選択される内容
    CB2(5) フィールド CB を含むピリオディックグループの第 2 オカレンス内のマルチプルバリューフィールド CB の 5 番目の値を参照します。
    CB2(1-5) フィールド CB を含むピリオディックグループの第 2 オカレンス内のマルチプルバリューフィールド CB の 1 番目から 5 番目の値を参照します。
  2. ある範囲のピリオディックグループオカレンス内の同じマルチプルバリューフィールド、または同じ範囲のマルチプルバリューフィールドを参照する場合、フィールド名の後にピリオディックグループオカレンスの範囲を入力し、その後にマルチプルバリューフィールド値の範囲をカッコで囲んで指定します。

    選択される内容
    CB3-5(2) フィールド CB を含むピリオディックグループの第 3 から第 5 までの各オカレンスに存在するマルチプルバリューフィールド CB の 2 番目の値を選択します。
    CB1-2(1-4) フィールド CB を含むピリオディックグループの第 1、第 2 オカレンス内のマルチプルバリューフィールド CB の 1 番目から 4 番目の値を参照します。

カウントインジケータ(C)

ピリオディックグループのオカレンス数、またはピリオディックグループに含まれていないマルチプルバリューフィールドの値の個数は、ピリオディックグループまたはマルチプルバリューフィールド名に文字 C を付けて参照できます。

field-name C count for multiple-value field or periodic group "field-name"
選択される内容
GBC ピリオディックグループ GB の最高オカレンスカウントを参照します。
MFC ピリオディックグループに含まれないマルチプルバリューフィールド MF に存在する値の個数を参照します。

個数は、ユーザーが特に長さやフォーマットを指定(「長さおよびデータフォーマット」を参照)しなければ、1 バイトのバイナリ数としてレコードバッファに返されます。

Adabas ファイルで Adabas 8 拡張 MU/PE の制限を使用する場合は、2 バイトのオカレンスカウント値(例えば、FB='MUC,2,B')を処理できるように、プログラムが 2 バイト以上のレコードバッファフィールドにオカレンスカウントを読み込むことを確認してください。 拡張 MU/PE が制限されたファイルの MU フィールドまたは PE グループのオカレンスカウント用のレコードバッファに 1 バイトフィールドのみを指定した場合、Adabas はレスポンスコード 55、サブコード 9 を返します。

ピリオディックグループ内のマルチプルバリューフィールドに値がいくつあるか確認するには、マルチプルバリューフィールド名の直後にピリオディックグループオカレンスと文字 C を入力します。

field-name i C count for multiple-value field "field-name" within a group occurrence
選択される内容
CB4C ピリオディックグループの第 4 オカレンス内マルチプルバリューフィールド CB の値の個数を参照します。

更新コマンドに対して C 指定をすると、カウントは無視され、カウントフィールドがレコードバッファに占める桁数がスキップされます。

ユーザーは、マルチプルバリューフィールドまたはピリオディックグループのカウントフィールドを直接更新できません。 これらのカウントフィールドは、マルチプルバリューフィールド値およびピリオディックグループオカレンスを追加または削除するときに、Adabas によって自動的に更新されます。

長さインジケータ(L)

フォーマットバッファインジケータ L を使用すると、LA または LB 英数字フィールド値またはワイド文字フィールド値の実際の長さを取得または指定できます。 このフォーマットバッファエレメントは、長さインジケータと呼ばれます。

注意:
現在、長さインジケータは、LA または LB フィールドのフォーマットバッファ指定にのみ使用できます。 他のフィールドにおける長さインジケータの使用のサポートは、Adabas の今後のリリースで導入される予定です。

長さインジケータは、フィールド名に続いて文字 L を使用して指定します。例えば、FB='ACL,4,B.' と指定すると、AC フィールドの長さが返されます。 フィールドがマルチプルバリューフィールドであるか、ピリオディックグループ内にある場合は、フィールド名および文字 L の後に関連するオカレンスインデックスが続きます。例えば、FB='ACL2,4,B.' と指定すると、マルチプルバリューフィールド AC の 2 番目の値が返されます。 圧縮フィールド長は、4 バイトのバイナリ形式で返されます。 他の長さおよび形式は指定できません。

MU/PE フィールドにおける長さインジケータの使用

長さインジケータを MU または PE フィールドで使用する場合、オカレンスインデックスを指定する必要があります。オカレンスインデックスの範囲を指定することもできます。 ただし、1-N オカレンスインデックスは指定できません。 以下に例を示します。

  1. 次の例では、ピリオディックグループフィールド AC の 2 番目のオカレンスの 5 個目の値の長さが返されます。

    FB='ACL2(5).'
  2. 次の例では、マルチプルバリューフィールド AC の最初の 10 個の値の長さが返されます。

    FB='ACL1-10.'
  3. 1-N 表記は MU または PE フィールドの長さインジケータでは許可されていないため、次の例は正しくありません。

    FB='ACL1-N.'
  4. 長さインジケータはオカレンスインデックスを持たない MU フィールドをサポートしないため、次の例も正しくありません。

    FB='MCL.'

また、MU または PE フィールドの同一のフォーマットバッファ内で、長さインジケータとアスタリスク長さ表記による値の要求を組み合わせる場合、値の要求には長さの要求に対応する範囲を使用する必要があります。 長さの要求と値の要求は同一のフォーマットバッファセグメントでも、異なるフォーマットバッファセグメントのどちらで指定しても構いません。 例として、XX が、MU オプション付きの LA または LB フィールドである場合を以下に示します。

  1. 次の有効な例では、XX フィールドの最初の 2 個の値の長さと実際の値を要求しています。

    FB='XXL1-2,XX1-2,*.'
    FB='XXL1,XXL2,XX1,*,XX2,*.'
  2. 次の無効な例では、XX フィールドの最初の 2 個の値の長さと実際の値を要求しようとしています。 ただしこの例では、MU フィールドに対して長さの要求に指定した範囲と、値の要求に指定した範囲が、対応する形式で指定されて異なため、無効となります。

    FB='XXL1,XXL2,XX1-2,*.'
    FB='XXL1-2,XX1,*,XX2,*.'
  3. 次の 2 つのフォーマットバッファは、XX フィールドの 3 番目および 4 番目の値の長さとその実際の値を要求しています。

    FB='XXL3,XXL4.'
    FB='XX3,*,XX4,*.'
  4. 次の無効なフォーマットバッファは、XX フィールドの 3 番目および 4 番目の値の長さとその実際の値を要求していますが、長さの要求に指定した範囲と、対応する形式で指定されていないため、エラーになります。

    FB='XXL3,XXL4.'
    FB='XX3-4,*.'
読み込みコマンドにおける長さインジケータの使用

読み込みコマンドのフォーマットバッファ内のフィールドに長さインジケータを指定する場合、レコードバッファにフィールド値を格納するために必要なバイト数(パディングがなく、長さに関する情報を含まないバイト数)が、レコードバッファ内の対応するフィールド位置に返されます。 レコードバッファに必要なスペースは、フィールドフォーマット、データベース、ファイルおよびユーザーの UES に関連する定義により異なります。

同一のフォーマットバッファ内で、LA または LB フィールドの長さを取得する長さインジケータを指定する際に、そのフィールドの基本フォーマットと異なる(変換された)フォーマットで、実際のフィールド値を要求することはできません。 例えば、文字の LB フィールド L1 がフォーマット A で格納されている場合、フォーマットバッファ指定 FB='L1L,4,B,L1,*,W.' は、L1 フィールドの長さの要求に加え、Unicode(フォーマット W)に変換された L1 フィールドの値を要求しているため、正しくありません。 長さ要素はフィールドの長さをフィールド固有のフォーマットで指定しますが、要求されたフォーマット(Unicode)で返される値の長さが変換により異なるため、このような制限があります。

文字 LB フィールド L1(フォーマット A)が 40,000 バイトの EBCDIC 値を含んでいる場合を次の例に示します。

  1. L1 のフォーマットバッファ指定が次のようであると仮定します。

    FB='L1L,4,B.'

    レコードバッファには、4 バイトバイナリ長の L1 フィールドの値が含まれます。

    X'00009C40'
  2. L1 のフォーマットバッファ指定が次のようであると仮定します。

    FB='L1L,4,B,L1,*,A.'

    レコードバッファには 4 バイトバイナリ長の L1 フィールドの値がレコードバッファエリアの先頭に含まれ、次に、40,000 文字の実際の L1 データが含まれます。

読み込み操作、長さインジケータ、および NB(空白圧縮なし)オプション

フォーマットバッファ内のフィールドが、対応する長さインジケータを使用して指定されていて(例えば FB='L1L, 4,B,L1.' など)、フィールドが空白圧縮の対象外(NB オプションが FDT 内のフィールドに指定されている)の場合、返される長さは、値が格納されたときに指定されたバイト数となります。 ただし、フィールドが空白圧縮の対象となっている場合、返される長さは左端から意味を持つバイト数のみが返され、それ以上の値は空白で埋められます。

読み込み操作、長さインジケータ、および NU(空値省略)オプション

フォーマットバッファ内のフィールドが、対応する長さインジケータを使用して指定されていて(例えば FB='L1L, 4,B,L1.' など)、フィールドが空値省略(FDT 内でこのフィールドに NB オプションが指定されている)でフィールド値が完全に空白の場合、返されるフィールド値の長さはゼロになります。フィールドが空値省略ではない場合、返されるフィールド値の長さは、1 つの空白の長さ(英数字フィールドで 1 バイト、ワイド文字フィールドで 2 バイト)になります。

更新コマンドにおける長さインジケータの使用

更新コマンドのフォーマットバッファに長さインジケータが指定されている場合、レコードバッファの対応する値がレコードバッファ内のフィールドの実際の値の長さを表します。 基本フィールドの長さインジケータ 1 個のみが指定でき、このインジケータはフォーマットバッファでアスタリスク(*)表記を伴う必要があります。

長さインジケータは、レコードバッファに可変長を指定するどのフォーマット要素(アスタリスク表記または長さゼロ表記による)より先にフォーマットバッファセグメント内で出現する必要があります。 つまり、長さインジケータの場所は常に同じで、このフォーマットで指定されるどのフィールドの値からも影響を受けません。

最高オカレンス/値インジケータ(N)

文字 N を使用すると、最高値または最高オカレンスの番号がわからなくても、マルチプルバリューフィールドを構成している複数の値から最高値を選択したり、ピリオディックグループの最高オカレンスを選択できます。

注意:
1-N 表記は、LB フィールドではサポートされません。

1-N を使用すると、マルチプルバリューフィールドを構成している値をすべて選択したり、ピリオディックグループのオカレンスをすべて選択できます。 ピリオディックグループ内のマルチプルバリューフィールドの場合、グループオカレンスを示す 1-N という指定をフィールドオカレンスの指定を組み合わせることはできません。

NC は、そのフィールドを含むピリオディックグループの最高オカレンス内の現存するマルチプルバリューフィールドの値の数を選択します。

field-name N
ピリオディックグループ field-name の最高オカレンスまたはマルチプルバリューフィールド field-name の最高値
field-name NC
field-name を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド field-name の値の数
field-name NC
マルチプルバリューフィールド field-name の値をすべて選択するか、またはピリオディックグループ field-name のオカレンスをすべて選択します。
field-name N (N)
field-name を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド field-name の最高値
field-name N(1-N)
field-name を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド field-name のすべての値
field-name N( i [- j ] )
field-name を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド field-name の値または値の範囲

マルチプルバリュー LB フィールドおよびピリオディックグループ内の LB フィールドでは、フィールドの特定のオカレンスを指定する必要があります。 次の例では、マルチプルバリュー LB フィールド L2 の最初の値が選択されます。

FB='L21.'

オカレンスインデックスのない基本フィールドを指定することはできません。 例えば、次のフォーマットバッファ指定は有効ではありません

FB='L2.'
field-name i [- j ] (N)
field-name を含むピリオディックグループのオカレンスまたはオカレンスの範囲内にあるマルチプルバリューフィールド field-name の最高値

マルチプルバリュー LB フィールドおよびピリオディックグループ内の LB フィールドでは、フィールドの特定のオカレンスを指定する必要があります。 次の例の場合、2 番目の PE グループインスタンスにある LB フィールド L3 の 5 番目の値が選択されます。

FB='L32(5).'
field-name i [-j ] (1-N)
field-name を含むピリオディックグループのオカレンスまたはオカレンスの範囲内にあるマルチプルバリューフィールド field-name の全値。
選択される内容
MFN マルチプルバリューフィールド MF の最高(最後)の値。 マルチプルバリューフィールド MF に 4 つの値がある場合は、4 番目の(最後に入力された)値が選択されます。
GBN ピリオディックグループ GB の最高オカレンス番号。
MFNC MF を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド MF の値の個数。
MF1-N マルチプルバリューフィールド MF の全値。
GB1-N ピリオディックグループ GB の全オカレンス。
MFN(1-N) ピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド MF の全値。
MFN(N) MF を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド MF の最高値。
MFN(4) MF を含むピリオディックグループの最高オカレンスにあるマルチプルバリューフィールド MF の 4 番目の値。
CB3-5(N) CB を含むピリオディックグループの第 3 から第 5 のオカレンスにあるマルチプルバリューフィールド CB の最高値。
CB2(1-N) CB を含むピリオディックグループの第 2 のオカレンスにあるマルチプルバリューフィールド CB の全値。

SQL 有意性インジケータ(S)

S または空値インジケータ、およびレコードバッファ内の空値インジケータ値は、フィールドの値(ゼロまたは空白を含む)が有効であるか、または有効でない(未定義)かを示します。 S インジケータは、NC オプションで定義されたエレメンタリフィールドにのみ適用でき、NU オプション付きフィールドには適用できません。

field-name S SQL significance indicator

空値インジケータの説明については、「レコードバッファ」セクションを参照してください。また、SQL 空値フィールドの定義方法については、『Adabas ユーティリティマニュアル』の ADACMP ユーティリティの説明を参照してください。

以下に示したレコードバッファの空値インジケータ値は、長さが 2 バイトの標準長で、フォーマットが固定小数点です。この長さとフォーマットは変更しないでください。

更新タイプのコマンドの場合、対応する空値インジケータ値が X'FFFF' で、かつフィールドに対して NN オプションが指定されていないと、空値がフィールドに格納されます。 それ以外の場合、空値インジケータは X'0000' である必要があります。 この値は、S インジケータと組み合わせることによって、レコードバッファ内の他の場所に格納されたフィールド値が格納されることを示します。

S インジケータは更新タイプのコマンドには不要です。S インジケータが指定されていない場合にも、S インジケータが指定され、対応する空値インジケータ値がゼロに設定されているときと同じように、フィールド値を更新します(フィールド内の空値は値である)。 次の例を参照してください。

読み込みタイプのコマンドでは、NN オプションなしで NC フィールドが定義されたときに、S インジケータが必要です。 READ コマンドが NC 指定されたフィールドを検出し、そのフィールドに実際に空値が含まれていた場合、S インジケータがなければレスポンスコード 55 が返されます。

この例では、"フィールド名 S" インジケータをレコードバッファ内の 2 バイトの空値インジケータとともに使用してレコードを更新または追加し、フィールド AA を SQL 空値に設定し、フィールド AA の値を無視します。

フォーマットバッファ
AAS , AA , 2 , ... .
読み込むフィールドの名前
レコードバッファ
FFFF  123F
Adabas から返されるフィールド値

NC フィールドを含むグループまたはフィールド範囲を指定する場合の SQL 有意性(シグニフィカンス)インジケータの使用例については、「有意性(シグニフィカンス)インジケータおよび連続フィールドの指定」を参照してください。

"フィールド名 S" インジケータは、フォーマットバッファ内の任意の位置に指定できます。つまり、対応するフィールドエレメントより先に置く必要はありません。 更新タイプのコマンドの場合、フォーマットバッファに同じフィールドを参照するエレメントを複数含めることはできません。

AAS. 読み込み/更新コマンドに有効です。
AA. 読み込み/更新コマンドに有効です。
AAS,AA,AAS. 読み込みコマンドにのみ有効です。

つまり、更新タイプのコマンドには、同じフィールドを参照するフォーマットバッファエレメントを複数指定することはできません。

AA,AA. レスポンスコード 44 が返されます。
AA,AAS,AA. レスポンスコード 44 が返されます。

長さおよびデータフォーマット

長さおよびフォーマットパラメータは、FDT に定義されている標準値とは異なる長さやフォーマットでフィールド値を指定したり、返したりする場合に使用します。 長さまたはフォーマットパラメータを省略した場合、フィールドの標準の長さおよびフォーマットでフィールド値を指定する必要があります。返されるフィールド値も、標準の長さおよびフォーマットとなります。

[ , length ] [ , data-format ]

許可されているデータ長とフォーマット」表に変換可能なフォーマットと長さを示します。 サブフィールド、サブディスクリプタ、スーパーフィールド、スーパーディスクリプタ、またはハイパーディスクリプタに対してフォーマット変換は指定できません。

指定する長さは、そのフォーマットで値が入るだけの大きさで、かつ許容最大長を超えない値にする必要があります。

長さを 0 に指定するか、または field-name が可変長フィールド(標準長なし)として定義されているフィールドを参照する場合は、Adabas がレコードバッファ内に返す値の前には、値の長さを含む(長さバイトも含む)1 バイトのバイナリフィールドが付加されます。 更新コマンドの場合、この長さバイトはユーザーがレコードバッファの先頭に指定する必要があります。

フォーマットエレメントに長さゼロを指定すると、レコードバッファの LB フィールド値に使用できるスペースは可変で、かつ実際の LB フィールド値によって異なります。 この場合、レコードバッファの LB フィールド値の先頭 4 バイトは、この 4 バイト自体を含む LB フィールドの実際の長さ(LB フィールド値の長さに 4 を加えた値)を格納するのに使用されます。

指定するフォーマットは、フィールドの標準フォーマットと変換可能なフォーマットでなければなりません。

このセクションでは、さらに次のトピックを取り上げています。

アスタリスク(*)を使った長さ表記

LA および LB フィールドにのみ、フォーマット要素に長さではなくアスタリスク(*)を指定できます。 アスタリスクを標準の英数字フィールドおよびワイド文字フィールドに指定することはできません。 アスタリスクは、レコードバッファの LB フィールド値に使用できるスペースが可変となり、LB フィールドの実際の値によって異なることを示します。 ただし、長さゼロの指定とは異なり、レコードバッファでは LB フィールド値の前に 4 バイト長フィールドは存在しません。LB フォーマット要素に対応するレコードバッファエリアには、LB フィールドの値のみが含まれます。 実際の LB フィールド値の長さは読み込みコマンド用に取得される必要があり、新しいフォーマットバッファ長さインジケータ L を使用する更新コマンド用に指定される必要があります。 長さインジケータの詳細については、このマニュアルの「長さインジケータ(L)」を参照してください。

次の例では、LB フィールド L1 のレコードバッファには L1 フィールドの値のみが含まれます。次に 10 バイトが割り当てられた AA フィールドの値が続きます。

FB='L1,*,AA,10,A.'

次の例では、LB マルチバリューフィールド L2 のレコードバッファには、L2 フィールドの最初の 10 個の値が含まれます。

FB='L21-10,*.'

レコードバッファは、そのフォーマット要素のアスタリスクの長さ設定が含まれている場合は、フィールド全体が使用する十分な空きスペースが確保されるため、必ずしも必要ではありません。 ただし、読み込みコマンドの処理中に次の両方の条件が合致した場合、フィールド値が切り捨てられます。

これらの条件に合致する場合、エラーは返されません。 上記の 2 番目の例(FB='L21-10,*.')でこの条件が合致した場合、Adabas は読み取る 10 個の値を対応するレコードバッファセグメントの長さに合わせて切り落とします (右から順番に切り落とされます。つまり、最後の値が最初に切り落とされます。まだ残りの空きスペースが不十分な場合、最後から 2 番目が切り落とされ、以下同様に続きます)。極端な場合、このフィールド用にまったく空きスペースがない場合は、値はゼロバイトに切り落とされます。

上記の最初の例では(FB='L1,*,AA,10,A.')、レコードバッファセグメントが非常に短い場合、固定長が指定されたフィールドまたは長さがゼロ(0)のフィールドには切り落としが許可されていないため、切り落としは発生しません。 切り落としは発生しませんが、ニュークリアスはレスポンスコード 53(レコードバッファが非常に小さい)を返します。

Adabas ニュークリアスにより実行される読み取りコマンドでのみ、アスタリスク表記が指定された値が切り落とされます。更新コマンドでは切り落としは発生しません。 さらに、ADACMP ユーティリティは、アスタリスク表記が指定された値を切り落としません。

編集マスク記号(読み込み時のみ有効)

編集マスクは、COBOL プログラミング言語の標準編集マスク規則に従って使用します。

編集マスクは、数字として定義されたフィールドに対してのみ指定できます。 Adabas が編集フィールドに返すデータは、フィールドの標準形式にかかわらず、すべてアンパック 10 進数に変換されます。 編集フィールドに返すことができる最大桁数(編集文字以外)は 15 桁です。

編集フォーマットが指定されたフィールドの場合、長さパラメータはフィールド値と編集文字が入るだけの大きさである必要があります。

フォーマット 生成される編集マスク
E1 ZZZZZZZZZZZZZZZ
E2 ZZZZZZZZZZZZZ9-
E3 ZZZZZZZZZ99.99.99
E4 ZZZZZZZZZ99/99/99
E5 Z.ZZZ.ZZZ.ZZZ.ZZZ,ZZ
E6 Z,ZZZ,ZZZ,ZZZ,ZZZ.ZZ
E7 Z,ZZZ,ZZZ,ZZZ,ZZ9.99-
E8 Z.ZZZ.ZZZ.ZZZ.ZZ9,99-
E9 *,***,***,***,**9.99-
E10 *.***.***.***.**9,99-
E11 ユーザー定義編集マスク
E12 ユーザー定義編集マスク
E13 ユーザー定義編集マスク
E14 ユーザー定義編集マスク
E15 ユーザー定義編集マスク

注意:
年月日編集フォーマット E3 と E4 は、年の上 2 桁をスペースに置き換えますが、2000 年の場合にはこの編集を行いません

フォーマットバッファ フィールド値 編集後の値
XC,15,E1. 009877 bbbbbbbbbbb9877
XC,8,E4. 301177 30/11/77
XB,5,E7. -366 3.66-
XB,7,E9. 542 **5.42
Y2,10,E4. 20000229 2000/02/29

許可されているデータ長とフォーマット

許可されているデータ長とフォーマット」表に変換可能なフォーマットと長さを示します。 サブフィールド、サブディスクリプタ、スーパーフィールド、スーパーディスクリプタ、またはハイパーディスクリプタに対してフォーマット変換は指定できません。

フォーマット 最大長(バイト) データタイプ 変換可能フォーマット
A 253 英数字。左づめ。 W
W 253 1 ワイド文字。左づめ。 A
A、W 16,381 1,2 ロング英数字(LA)オプションが付加されたの英数字またはワイド文字。左づめ。2 バイトのバイナリの長さバイト(長さバイトを含む)が先行します。 W、A
B 126 バイナリ。右詰め。符号なし。 A、F、P、U
F 4 固定小数点。右詰め。符号付。2 または 4 バイト。 A、B、P、U
G 8 浮動小数点。4 または 8 バイト。 なし
P 15 パック 10 進数。正 =A、C、E または F 負=B または D の符号付。 A、B、F、U
U 29 アンパック 10 進数正 =A、C、E または F 負=B または D の符号付。 A、B、F、P

注意:

  1. ワイド文字フィールドは、英数字フィールドと同様に、FDT で定義された標準長(バイト単位)または可変長になります。 ワイド文字フィールドを可変長フォーマット以外で書き換える場合は、ユーザーエンコードとの互換性を確保する必要があります。例えば、Unicode は偶数バイトである必要があります(最大 252 バイト)。
  2. レコードバッファ内のフィールドの先頭に長さバイト(可変フィールド長表記)がある場合は ロング英数字の最大長。それ以外の場合、最大長は 16381 バイトです。
  3. LA および LB フィールドにのみ、フォーマット要素に長さではなくアスタリスク(*)を指定できます。 詳細については、「アスタリスク(*)を使った長さ表記」を参照してください。

フィールドの連続表記

"field-name - field-name" の形式を使用すると、一連の連続するフィールドを(FDT内での並び順に従って)参照することを指定できます。 最初と最後のフィールド名をハイフンで結合します。

field-name - field-name series notation

この範囲内には、マルチプルバリューフィールドおよびピリオディックグループが含まれないようにする必要があります。

グループ名は、最初または最後の名前として指定できませんが、指定範囲内にグループが含まれていてもかまいません。

この範囲内の全フィールドに、標準の長さとフォーマットが適用されます。 長さやフォーマットの指定もできません。

選択される内容
AA-AC フィールド AA、AB、および AC を参照します。
AA-GC なし。 範囲内にマルチプルバリューフィールドやピリオディックグループを含めることはできません。
GA-AC なし。 範囲の先頭/末尾にはグループフィールドを指定できません。
AA,5,U,-AD なし。 範囲指定では長さやフォーマットは指定できません。

SQL 有意性インジケータおよび連続フィールドの指定

NC フィールドを含むグループまたはフィールド範囲を指定する場合は、読み込み(Lx)コマンドの S 演算子は任意指定です。 また、更新(A1)コマンドでは、S 演算子を指定しないでください。 Adabas が、レコードバッファ内のフィールドの直前にフォーマットバッファ内の NC フィールドに対応する空値インジケータが置かれているものと見なすからです。

例えば、FDT に次のフィールド定義があるものとします。

01,GR 02,AA,8,A 02,BB,8,A,NC 02,CC,8,A

更新タイプのコマンドのフォーマットバッファに次のように指定した場合:GR. または AA-CC. このとき、レコードバッファの構造は次のようになります。

AA-value null-indicator-BB BB-value CC-value

つまり、フォーマットバッファに S インジケータを指定していない場合にも(指定できません)、レコードバッファシーケンスに空値インジケータが含まれている必要があります。

READ(Lx)コマンドのフォーマットバッファが次のように指定されていた場合:GR,BBS. または AA-CC,BBS. このとき、レコードバッファの構造は次のようになります。

AA-value null-indicator-BB BB-value CC-value null-indicator-BB

つまり、最初の空値インジケータはレコードバッファ内に暗黙に出現し、2 番目の空値インジケータはフォーマットバッファによって明示的に呼び出されます。

スペース表記(nX)

nX 構文は、読み込みコマンドと更新コマンドでは使用法が異なります。

nX

読み込みコマンドの場合、nX は次のフィールド値の直前に Adabas が N 個の空白をレコードバッファに挿入することを意味します。

フォーマットバッファ
  AA    ,    5X    ,    BB
読み込むフィールドの名前
レコードバッファ
value-AA   5-blanks  value-BB
Adabas から返されるフィールド値

更新コマンドの場合、nX を指定すると、Adabas がレコードバッファ内の n 桁を無視します。

フォーマットバッファ
   XX     ,     5X     ,     YY
更新するフィールドの名前
レコードバッファ
value-XX  ignore-5-bytes  value-YY
ユーザーが指定したフィールド値

テキスト挿入表記

テキスト構文は、読み込みコマンドと更新コマンドでは使用法が異なります。

'text'

読み込みコマンドの場合、引用符内の文字列をレコードバッファ内で次のフィールド値の直前に挿入します。 指定可能な文字列の長さは 1~255 バイトであり、引用符を除く任意の英数字を含めることができます。

フォーマットバッファ
   AA,'here is some text', BB
読み込むフィールドの名前
レコードバッファ
value-AA here is some text value-BB
Adabas から返されるフィールド値

更新コマンドの場合、引用符で囲まれた桁数分だけ、レコードバッファ内でその位置に相当する桁が無視されます。

Top of page

フォーマットバッファでの LA(ロング英数字)フィールドのフィールド長の指定

通常、LA オプションは可変長データとともに使用します。 LA オプションを使用する英数字フィールドの長さをフォーマットバッファに指定することもできます。 ただし、長さは 16381 バイトに制限されます。

フォーマットバッファ
AA,5, ...
読み込むフィールドの名前
レコードバッファ
ABC__
Adabas から返されるフィールド値

LA フィールドは、NU オプション(空値省略)、NC/NN SQL 空値有意性(シグニフィカンス)オプション(ページ )、または MU(マルチブルバリューフィールド)オプションが指定可能であり、PE(ピリオディック)グループのフィールドにすることもできます。

LA フィールドはディスクリプタであってはなりません。また、サブフィールド、スーパーフィールド、サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、フォネティックディスクリプタの親であってもなりません。

Adabas は通常の英字フィールドと同様に LA フィールドを圧縮します。つまり、トレーリング空白は削除されます。 バイナリデータを LA フィールドに格納する場合には、このことを頭に入れておく必要があります。

Top of page

フォーマットバッファのパフォーマンスに関する考慮事項

フォーマットバッファの作成時、次の事項を考慮すると、効率を上げることができます。

Top of page