UNION

UNION は、構造体に適用される属性で、その構造体の直属のメンバーがすべて同じメモリ位置を占めることを示します。直属のメンバーとは、そのレベル番号が、自身を含む構造体よりも大きく、他のメンバーのレベル番号と等しく、自身が含むメンバーのレベル番号よりも小さいメンバーです。通常、直属のメンバーのレベル番号は、自身を含む構造体より 1 つ大きくなります。

UNION のすべてのメンバーは同じアドレスから始まります。あるメンバーを適切に配置するために追加のバイトが必要な場合は、それらのバイトが構造体の先頭の前に、つまり他のすべてのメンバーの前に確保されます。UNION のサイズは、その最大のメンバーのサイズになります。

次の例では、30 文字の ADDRESS_STRING、および ADDRESS_PIECES の各メンバーが、同じメモリを占有します。ADDRESS_PIECES.CITY を変更すると、ADDRESS_STRING も変更されます。

DECLARE
   1 ADDRESS UNION,
      2 ADDRESS_STRING CHARACTER(30), 
      2 ADDRESS_PIECES,
            3 NUMBER CHARACTER(6), 
            3 STREET CHARACTER(12), 
            3 CITY CHARACTER(12);

次の例では、16 個の別々のビットとして、または 1 つの固定 2 進数を含む単一エンティティとして、データを参照できます。

1 NUMBER UNION,
   2 FIXED_NUM FIXED BINARY(15), 
   2 FIXED_NUM_BIT BIT(16);
注: 複数のデータ型から成る 1 つの特定の表現に基づくコードは、機種依存性が高いため、慎重に使用する必要があります。