多重集合条件
多重集合条件は、ネストした表を様々な側面からテストします。
IS A SET条件
IS A SET条件を使用すると、指定されたネストした表が一意の要素で構成されているかどうかをテストできます。この条件は、ネストした表がNULLの場合に、UNKNOWNを戻します。それ以外では、ネストした表がセットである場合(ネストした表の長さが0(ゼロ)の場合も含む)にTRUEを戻し、その他の場合はFALSEを戻します。
is_a_set_condition::=
例
次の例は、表customers_demoから、cust_address_ntabというネストした表の列に一意の要素が含まれる行を選択します。
SELECT customer_id, cust_address_ntab
FROM customers_demo
WHERE cust_address_ntab IS A SET
ORDER BY customer_id;
CUSTOMER_ID CUST_ADDRESS_NTAB(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------------------------------------------------------------------------------------------
101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))
この例では、表customers_demoと、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法は、「MULTISET演算子」を参照してください。
IS EMPTY条件
IS [NOT] EMPTY条件を使用すると、指定されたネストした表が空かどうかをテストできます。単一の値(NULL)で構成されたネストした表は、空のネストした表とはみなされません。
is_empty_condition::=
この条件は、コレクションが空の場合にIS EMPTY条件にブール値TRUEを戻し、コレクションが空でない場合にIS NOT EMPTY条件にブール値TRUEを戻します。ネストした表またはVARRAYにNULLを指定すると、結果はNULLになります。
例
次の例は、サンプル表pm.print_mediaから、ad_textdocs_ntabというネストした表の列が空ではない行を選択します。
SELECT product_id, TO_CHAR(ad_finaltext) AS text FROM print_media WHERE ad_textdocs_ntab IS NOT EMPTY ORDER BY product_id, text;
MEMBER条件
member_condition::=
member_conditionは、要素がネストした表のメンバーかどうかをテストするメンバーシップ条件です。exprが指定されたネストした表またはVARRAYのメンバーと等しい場合、TRUEが戻されます。exprがNULLまたはネストした表が空の場合、NULLが戻されます。
-
exprの型は、ネストした表の要素型と同じである必要があります。 -
OFキーワードはオプションであり、条件の動作に影響しません。 -
NOTキーワードはブール出力を逆にします。exprが指定されたネストした表のメンバーである場合、FALSEが戻されます。 -
ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、比較条件を参照してください。
例
次の例は、表customers_demoから、cust_address_ntabというネストした表の列に、WHERE句で指定された値が含まれる行を選択します。
SELECT customer_id, cust_address_ntab
FROM customers_demo
WHERE cust_address_typ('8768 N State Rd 37', 47404,
'Bloomington', 'IN', 'US')
MEMBER OF cust_address_ntab
ORDER BY customer_id;
CUSTOMER_ID CUST_ADDRESS_NTAB(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
------------ ---------------------------------------------------------------------------------
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
この例では、表customers_demoと、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法は、MULTISET演算子を参照してください。
SUBMULTISET条件
SUBMULTISET条件は、指定されたネストした表が他の指定されたネストした表のサブ多重集合かどうかをテストします。
この演算子はブール値を戻します。nested_table1がnested_table2のサブ多重集合である場合、TRUEが戻されます。次の条件のいずれかが発生する場合、nested_table1はnested_table2のサブ多重集合となります。
-
nested_table1がNULLでなく、また行を含まない場合。空の多重集合はnested_table2に対してNULL以外の値を示すサブ多重集合であるため、nested_table2がNULLの場合でもTRUEが戻されます。 -
nested_table1とnested_table2がともにNULLでなく、nested_table1にNULL要素が含まれず、またnested_table1内の各要素がnested_table2内の等しい要素と1対1でマップされている場合。
次の条件のいずれかが発生する場合、NULLが戻されます。
-
nested_table1がNULLの場合。 -
nested_table2がNULLで、またnested_table1がNULLでもなく空でもない場合。 -
nested_table1およびnested_table2の各NULL要素をNULL以外の値に変更し、nested_table1内の各要素と等しいnested_table2内の要素の1対1マッピングを有効にすることで、nested_table1がnested_table2のサブ多重集合となっている場合。
前述の条件のいずれも発生していない場合は、FALSEが戻されます。
submultiset_condition::=
-
OFキーワードはオプションであり、演算子の動作に影響しません。 -
NOTキーワードはブール出力を逆にします。nested_table1がnested_table2のサブセットである場合、FALSEが戻されます。 -
ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、比較条件を参照してください。
例
次の例は、customers_demo表から、cust_address_ntabというネストした表がcust_address2_ntabというネストした表のサブ多重集合である行を選択します。
SELECT customer_id, cust_address_ntab FROM customers_demo WHERE cust_address_ntab SUBMULTISET OF cust_address2_ntab ORDER BY customer_id;
この例では、表customers_demoと、データを含むネストした表の列が2つ必要です。この表およびネストした表の列を作成する方法は、MULTISET演算子を参照してください。



