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);