*LIKE DEFINE

演算項目 1 に *LIKE があるDEFINE (フィールド定義)命令は、別のフィールドの属性 (長さおよび小 数点以下の桁数) に基づいてフィールドを定義します。

演算項目 2 には参照するフィールドの名前を、結果フィールドには定義する フィールドの名前を入れなければなりません。 演算項目 2 に指定されるフィー ルドはプログラム内または外部で定義することができ、定義するフィールドの 属性を入れます。 演算項目 2 は、リテラル、名前付き定数、浮動数値フィールド、またはオブジェクトにすることはできません。演算項目 2 が配列、配列要素、またはテーブル名の場合には、 配列またはテーブルの要素の属性がそのフィールドの定義に使用されます。 結果フィールドを配列、配列要素、データ構造、またはテーブル名にすること はできません。 ALTSEQ(*NO)、NOOPT、ASCEND、CONST またはヌル値可能などの属性 は、演算項目 2 から、結果フィールドによって引き継がれません。 データ・タイプ、 長さ、小数点以下の桁数だけが引き継がれます。

64 から 68 桁目 (フィールドの長さ) は、結果フィールドの指定を演算項目 2 の 指定より長くしたり短くするために使用することができます。 数字の前のプラス符号 (+) は増やす長さを示し、マイナス符号 (-) は減らす長さを示します。 65 から 68 桁目には、長さの増減 (右寄せ) を入れるか、あるいはブランクにする ことができます。 64 から 68 桁目がブランクの場合には、結果フィールドの指定は 演算項目 2 の指定と同じ長さで定義されます。定義するフィールドの小数点以下の桁数を変更することはできません。 フィールド長の指定を使用できるのは、図形、UCS-2、数値、および文字フィールドの場合だけです。

図形フィールドまたは UCS-2 フィールドの場合には、フィールド長の 差は 2 バイト文字で計算されます。

演算項目 2 が図形フィールドまたは UCS-2 フィールドの 場合、結果フィールドは同じタイプ、すなわち、図形または UCS-2 として定義 されます。 新しいフィールドには、モジュールのデフォルトの図形 CCSID また は UCS-2 CCSID が使用されます。 新しいフィールドに、演算項目 2 のフィールドと同じ CCSID を使用したい 場合には、定義仕様書で LIKE キーワードを使用します。 長さの調整は、2 バイト単位で表されます。

図 276. *LIKE を指定した DEFINE 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
 *  FLDA is a 7-position character field.
 *  FLDB is a 5-digit field with 2 decimal positions.
 *
 *
 *  FLDP is a 7-position character field.
C     *LIKE         DEFINE    FLDA          FLDP
 *
 *  FLDQ is a 9-position character field.
C     *LIKE         DEFINE    FLDA          FLDQ             +2
 *
 *  FLDR is a 6-position character field.
C     *LIKE         DEFINE    FLDA          FLDR            - 1
 *
 *  FLDS is a 5-position numeric field with 2 decimal positions.
C     *LIKE         DEFINE    FLDB          FLDS
 *
 *  FLDT is a 6-position numeric field with 2 decimal positions.
C     *LIKE         DEFINE    FLDB          FLDT           +  1
 *
 *  FLDU is a 3-position numeric field with 2 decimal positions.
C     *LIKE         DEFINE    FLDB          FLDU            - 2
 *
 *  FLDX is a 3-position numeric field with 2 decimal positions.
C     *LIKE         DEFINE    FLDU          FLDX

数値フィールドの *LIKE DEFINE について、以下の点に注意してください。

図 277. *LIKE DEFINE の使用
D            DS
D  Fld1
D  Fld2      S              7P 2
 *
 * Fld1 will be defined as zoned because it is a subfield of a
 * data structure and numeric subfields default to zoned format.
 *
C    *LIKE      DEFINE      Fld2       Fld1
 *
 * Fld3 will be defined as packed because it is a standalone field
 * and all numeric items except subfields default to packed format.
C    *LIKE      DEFINE      Fld1       Fld3