DECLARE - 構造体形式

目的

構造体の構成と構造体の各レベルのメンバーの名前を定義します。

構文

DECLARE declaration[,…];

パラメーター

各宣言の形式は次のとおりです。

level identifier[(bound-pair)][(,…bound-pair)][attribute…]

または

level(declaration)[,…(declaration)][(bound-pair)][(,…bound-pair)][attribute…]

説明

構造体の宣言では、構造体の構成と構造体の各レベルのメンバーの名前を定義します。各宣言で構造体のメンバーを指定し、前にレベル番号を付ける必要があります。それぞれのレベルで単一の変数を宣言できるほか、配列や他の構造体の宣言などの 1 つ以上の完全な宣言を含めることもできます。主構造体の名前を構造体レベル 1 として宣言します。下位のメンバーは 1 よりも大きいレベル番号で宣言する必要があります。

DECLARE 1 PAYROLL,
   2 NAME,
      3 LAST CHARACTER(70) VARYING, 
      3 FIRST CHARACTER(70) VARYING, 
   2 SALARY FIXED DECIMAL(6,2);

この文では、PAYROLL という名前の構造体を宣言しています。この構造体では、修飾された参照で姓にアクセスできます。

PAYROLL.NAME.LAST = 'JONES';

姓と名は属性が同じであるため、同じ構造を次のようにして宣言できます。

DECLARE 1 PAYROLL,
   2 NAME,
      3 (LAST,FIRST) CHARACTER(70) VARYING 
   2 SALARY FIXED DECIMAL(6,2);

次の例は、UNION 属性を含む宣言を示しています。

DECLARE 1 CONSUMER_INFO,
   .
   .
   .
      3 PHONE_DATA UNION,
            4 PHONE_NUMBER CHARACTER (13), 
            4 ELEMENTS,
               5 LEFT_PAREN CHARACTER (1), 
               5 AREA_CODE CHARACTER (3),
               5 RIGHT_PAREN CHARACTER (1), 
               5 EXCHANGE CHARACTER (3),
               5 HYPHEN CHARACTER (1),
               5 ACTUAL_NUMBER CHARACTER (4),
      3 ADDRESS_DATA,
            .
            .
            .

この例では、PHONE_DATA の直属のメンバー (PHONE_NUMBER および ELEMENTS) の宣言に関連付けられた UNION 属性で同じ記憶域を共有するため、PHONE NUMBER を変更すると ELEMENTS の 1 つ以上のメンバーも変更されます。同様に、ELEMENTS のメンバーを変更すると PHONE_NUMBER も変更されます。一方、ADDRESS_DATA のメンバーには、PHONE_DATA の直属のメンバーではないため UNION 属性は適用されません。ADDRESS_DATA のメンバーには、通常の構造体メンバーと同じように個別の記憶域が割り当てられます。

制約事項

なし。