COLLECT
構文
目的
COLLECT
は、任意の型の列を引数に取り、選択された行から、入力された型のネストした表を作成する集計ファンクションです。このファンクションから正確な結果を取得するには、このファンクションをCAST
ファンクション内で使用する必要があります。
column
自体がコレクションである場合、COLLECT
の出力はコレクションのネストした表になります。column
がユーザー定義型である場合は、オプションのDISTINCT
、UNIQUE
およびORDER
BY
句を使用できるように、column
にMAP
またはORDER
メソッドが定義されている必要があります。
関連項目:
-
DISTINCT
句とORDER
BY
句の文字値を比較するためにCOLLECT
で使用する照合を定義する照合決定ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。
例
次の例では、oe.customers
サンプル表の電話番号のVARRAY列からネストした表を作成します。ネストした表には、収入水準がL
: 300,000
and
above
である顧客の電話番号のみが含まれます。
CREATE TYPE phone_book_t AS TABLE OF phone_list_typ; / SELECT CAST(COLLECT(phone_numbers) AS phone_book_t) "Income Level L Phone Book" FROM customers WHERE income_level = 'L: 300,000 and above'; Income Level L Phone Book -------------------------------------------------------------------------------- PHONE_BOOK_T(PHONE_LIST_TYP('+1 414 123 4307'), PHONE_LIST_TYP('+1 608 123 4344' ), PHONE_LIST_TYP('+1 814 123 4696'), PHONE_LIST_TYP('+1 215 123 4721'), PHONE_L IST_TYP('+1 814 123 4755'), PHONE_LIST_TYP('+91 11 012 4817', '+91 11 083 4817') , PHONE_LIST_TYP('+91 172 012 4837'), PHONE_LIST_TYP('+41 31 012 3569', '+41 31 083 3569'))
次の例では、サンプル表oe
.warehouses
の倉庫名の列からネストした表を作成します。ORDER
BY
を使用して、倉庫名を順序付けます。
CREATE TYPE warehouse_name_t AS TABLE OF VARCHAR2(35); / SELECT CAST(COLLECT(warehouse_name ORDER BY warehouse_name) AS warehouse_name_t) "Warehouses" FROM warehouses; Warehouses -------------------------------------------------------------------------------- WAREHOUSE_NAME_TYP('Beijing', 'Bombay', 'Mexico City', 'New Jersey', 'San Franci sco', 'Seattle, Washington', 'Southlake, Texas', 'Sydney', 'Toronto')