可変長フィールド
CRTCBLMOD コマンドまたは CRTBNDCBL コマンドの CVTOPT パラメーターに *VARCHAR、または PROCESS ステートメントに VARCHAR オプションを指定すると、
可変長フィールドをプログラムで使用することができます。
*VARCHAR を指定すると、ILE COBOL プログラムは外部記述ファイルの可変長フィールドを ILE COBOL グループ項目に変換します。
そのようなグループ項目の例を次に示します。
06 ITEM1.
49 ITEM1-LENGTH PIC S9(4) COMP-4.
49 ITEM1-DATA PIC X(n).
n は可変長フィールドの最大長です。
プログラムの中で、PIC S9(4) COMP-4 はこのタイプの他の宣言と同様に扱われ、PIC X(n) は標準的な英数字として扱われます。
*VARCHAR を指定しないと、可変長フィールドは無視され、ILE COBOL プログラム中の FILLER フィールドとして宣言されます。
*NOVARCHAR を指定しない場合、項目は次のように宣言されます。
06 FILLER PIC x(n+2).
構文については CVTOPT パラメーターにある CVTOPT パラメーターを参照してください。
プログラムでは、生成されたデータ部分に対して有効な、あらゆる文字操作を実行できます。
ただし、フィールドの構造上、長さ部分は有効な 2 進データでなければなりません。
それが負の場合または最大フィールド長より大きい場合、このデータは無効です。
フィールドの最初の 2 バイトに有効な 2 進数が入っていない場合に、
そのフィールドを含むレコードに WRITE や REWRITE を実行しようとするとエラーになり、ファイル状況 90 が戻されます。
可変長フィールドを指定する場合、次の条件が適用されます。
- データ部に形式 2 の COPY ステートメントが使用されている場合に可変長フィールドが検出されると、
それは ILE COBOL プログラム中で固定長文字フィールドとして宣言されます。
- 1 バイト文字フィールドの場合、宣言された ILE COBOL フィールドの長さは、DDS フィールドの 1 バイト文字数に 2 バイトを加えた数値です。
- DBCS グラフィック・データ・フィールドの場合、
宣言された ILE COBOL フィールドの長さは、DDS フィールドの中の DBCS グラフィック文字の数を 2 倍した数値に 2 バイトを加えた数値です。
グラフィック・データ・タイプの詳細については DBCS グラフィック・フィールドを参照してください。
ILE COBOL フィールドの追加の 2 バイトには、可変長フィールドの現在の長さを表す 2 進数が入れられます。
図 105 に、可変長フィールドの ILE COBOL フィールド長を示します。
図 105. 可変長フィールドの ILE COBOL フィールド長
- ILE COBOL
プログラムは、宣言された固定長フィールドに対して有効な、あらゆる文字操作を実行できます。
ただし、フィールドの構造上、このフィールドの最初の 2 バイトには有効な 2 進データが入っていなければなりません (現行フィールド長データは、0 より小さいか、
または DDS フィールド長より大きい値である場合は無効です)。
フィールドの最初の 2 バイトに無効なフィールド長データが入っている場合は、入出力操作エラーになります。
ファイル状況 90 が戻されます。
- *VARCHAR を指定しないと、FILLER に値を代入することはできないため、
可変長フィールドで WRITE 操作を実行する際に問題が発生する可能性があります。
2 バイト・フィールドに、フィールドで許可されている範囲より長い値 (X'4040' など) が入れられることがあります。
この場合、入出力エラーになります。
- SORT/MERGE キーに可変長フィールドを使用することはできません。
SORT/MERGE キーに可変長フィールドを使用すると、構造全体が英数字データ項目として比較されます。
可変長フィールドを使用するプログラムの例については 可変長 DBCS グラフィック・フィールドの使用例を参照してください。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.