EQLでは、コレクションからの複数割当て属性をセットとして表します。
1つのセットは、通常1つの複数割当て属性の値から導出された、要素のグループから構成されます。EQLセットは、数学セットと同様に動作することを意図しています。セット内の要素の順序は指定されません(通常、識別できません)。空のセットとは、要素を1つも含まないセットのことです。
セット内のすべての要素を同じデータ型にする必要があります。セット内の要素が2つの複数割当て属性からのものである場合(たとえば、INTERSECTION行関数を使用した場合)、これらの2つの複数割当て属性は同じデータ型である必要があります。セットには重複値が含まれてはならず、他のセットを含むこともできません。
これらの手法についてはすべてこの項で説明します。
セットは、あるEQL問合せから別のEQL問合せにおいて永続的ではありません。
{3, 4.0, 'five'}
には、整数、doubleおよび文字列が含まれているため無効です。
セットにはNULL値を含むことはできません。さらに、セットはNULLになることはできませんが、空になることは可能です。これらの要件は、複数割当てのコレクション属性およびセット型の他の式の両方に適用されます。
コレクション・レコードに複数割当て属性に対する割当てがない場合、EQL問合せにおいて、そのレコードのその属性の値は空のセットになります。
EQL文(DEFINEまたはRETURNのいずれか)の結果にはセットが含まれている場合があります。つまり、たとえば、エンティティ(ビュー)を定義し、そのエンティティを使用する問合せに対して、複数割当て属性のすべての値を指定できます。
セットでは、IS NULLおよびIS NOT NULL演算はサポートされていません。かわりに、IS_EMPTYおよびIS_NOT_EMPTY関数を使用して、セットが空であるかどうかを判別してください。さらに、IS_EMPTYおよびIS_NOT_EMPTY関数は、アトミック値(単一割当て属性など)では使用できません。
セットの等価性は、数学的なセットの等価性と同じです。つまり、2つのセットは、それぞれにまったく同じ要素が含まれている場合にのみ等価です。セット内での要素の順序は重要ではありません。空の2つのセットは等価です。
セットの等価性および非等価性は、同じ型の2つのセットに対してのみ定義されます。たとえば、mdex:long-setとmdex:geocode-setの等価性を比較することはできません。比較すると、EQL型エラーが発生します。
セット間の等価性をテストするために、= (等しい)および<> (等しくない)演算子を使用できます。セットでは、< (より小さい)および> (より大きい)演算子は定義されていません。
この章では、セットで使用される集計関数および行関数について説明します。
前述したように、セット間の等価性をテストするために、= (等しい)および<> (等しくない)演算子を使用できます。セットでは、他の演算子(乗算演算子*など)は使用できません。