LIKE(名前 {: 長さ調整 })

LIKE キーワードは、項目を既存の項目と類似させて定義するために使用されます。 LIKE をオブジェクトとともに使用する詳細は、LIKE(オブジェクト名)を参照してください。

LIKE キーワードを指定した場合には、定義されている項目はパラメーターとして指定された項目の長さおよびデータ・フォーマットを引き継ぎます。 独立フィールド、プロトタイプ、およびデータ構造サブフィールドはこのキーワ ードを使用して定義することができます。 LIKE のパラメーターは、独立フィールド、データ構造、データ構造サブフィール ド、プロシージャー・インターフェース定義中のパラメーター、またはプロトタ イプ名とすることができます。 データ・タイプ記入項目 (40 桁目) はブランクでなければなりません。

このキーワードは *LIKE DEFINE 命令コードと類似しています (*LIKE DEFINEを参照)。ただし、定義されたデータがその長さだけでなくデータ形式および CCSID を引き継ぐ点で *LIKE DEFINE とは異なっています。
注: ALTSEQ(*NONE)、NOOPT、ASCEND、CONST および空 (NULL) 機能などの属性 は、LIKE のパラメーターから定義された項目に引き継がれません。 データ・タイプ、長さ、小数点以下の桁数、および CCSID だけが引き継がれます。

LIKE のパラメーターがプロトタイプであった場合には、定義されている項目はそ のプロトタイプの戻り値と同じデータ・タイプになります。 戻り値がない場合には、エラー・メッセージが出されます。

変更の始まり 定義している項目の長さを調整できます。 長さ調整は、自由形式定義の LIKE キーワードの 2 番目のパラメーターに指定するか、または、 固定形式定義の長さ記入項目に指定します。 長さ調整は正符号 (+) または負記号 (-) を付けて指定する必要があります。 変更の終わり

以下は、LIKE キーワードを異なるデータ・タイプで使用する際のいくつかの考慮 事項です。

LIKE を使用して配列を定義する場合であっても、DIM キーワードは配列の次元を 定義するためにまだ必要です。 しかし、DIM(%elem(配列)) を使用して、別の配列と完全に類似の配列を定義する ことができます。

LIKEDS を使用して、別のデータ構造と同じサブフィールドを持つようデータ構造を定義することができます。

LIKE キーワードを使用してデータを定義する例

以下の例では、最初に自由形式で、次に固定形式で示されています。

  1. フィールド Long_name は、 フィールド Name と類似であり、長さを 5 文字増やしたものと定義されています。
  2. サブフィールド配列 NameList は、フィールド Name と類似であると定義されています。 配列の各要素は、値 *ALL'X' で初期化されます。
  3. プロトタイプ GetBonus は、 フィールド Salary と類似であり、長さを 2 桁減らしたものと定義されています。
変更の始まり
図 1. 他のフィールドと類似 (LIKE) のフィールドを自由形式で定義する
 DCL-S Name CHAR(20);
 DCL-S Long_name LIKE(Name : +5);  1 

 DCL-DS Struct;
    NameList LIKE(Name) DIM(20) INZ(*ALL'X');  2 
 END-DS;

 DCL-PR GetBonus LIKE(Salary : -2);  3 
    Employee_Id INT(10) VALUE;
 END-PR;
変更の終わり 変更の始まり
図 2. 他のフィールドと類似 (LIKE) のフィールドを固定形式で定義する
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D.....................................Keywords+++++++++++++++++++++++++++++
D  Name           S             20
D  Long_name      S             +5    LIKE(Name)  1 

D  Struct         DS
D   NameList                          LIKE(Name) DIM(20) INZ(*ALL'X')  2 

D  GetBonus       PR         -2    LIKE(Salary)  3 
D   Employee_Id                 10I 0 VALUE
変更の終わり