セット・コンストラクタ

EQLを使用すると、ユーザーは問合せ内に直接セットを記述できます。

セット・コンストラクタの構文は次のとおりです。
{<expr1> [,<expr2>]*}
ここで、中カッコにより、1つ以上の式をカンマ区切りのリストとして囲みます。
たとえば、次に示すのは整数セットです。
{ 1, 4, 7, 10 }
一方、文字列セットは次のようになります。
{ 'Red', 'White', 'Merlot', 'Chardonnay' }
セット・コンストラクタの使用の際には、次の点に注意してください。
  • セット・コンストラクタは、式が有効である問合せ内のどこにでも出現する可能性があります。(セット・コンストラクタにはセット型が指定されているため、アトミック値を必要とするコンテキスト内でセット・コンストラクタを使用すると、EQLチェック・エラーが発生します。)
  • セット・コンストラクタの個別の要素は、型が正しいかぎり、不定の式になる場合があります。たとえば、x、yおよびzが整数であるかぎり、次のように記述できます。
    { x, y + z, 3, HIERARCHY_LEVEL(managedAttr) }
  • 中カッコ内のすべての式を同じ型にする必要があります。たとえば、整数と文字列を混在させることはできません。
  • 空のセット・コンストラクタは使用できず、中カッコ内に最低1つの式を含める必要があります。

EQLでは、セット・コンストラクタ内で、整数はdoubleまたは文字列リテラルに、あるいは管理対象属性値に自動的には変換されません。このため、{1, 2.5}と記述すると型エラーが発生します。この場合はTO_DOUBLEまたはTO_MANAGED_VALUEを使用して、手動で変換を実行します(たとえば、{TO_DOUBLE(1), 2.5})。

セット・コンストラクタの例

この最初の例では、SELECT句が、2つの要素として'Red'および'White'を含む文字列型のセット(名前はselectWines)を作成します。次に、selectWinesセットは、HAVING句内で返されるレコードを、WineType割当てが'Red'または'White'のいずれかであるレコードに制限するために使用されます。
RETURN results AS
SELECT
   {'Red', 'White'} AS selectWines,
   WineID AS idRec,
   WineType AS wines,
   Body AS bodyAttr
HAVING wines IN selectWines
ORDER BY idRec
この2番目の例は最初の例によく似ていますが、WHERE句内でセットを使用する点が異なります。
RETURN results AS
SELECT
   WineID AS idRec,
   WineType AS wines,
   Body AS bodyAttr
WHERE WineType IN {'Red', 'White'} 
ORDER BY idRec

いずれの問合せでも、WineTypeが'Red'または'White'であるレコードのみが返されます。