본문 바로가기

[오라클 레퍼런스 함수] COLLECT - nested table 생성하여 집계(나열)

by ㅇㅍㅍ 2023. 8. 1.
[오라클 레퍼런스 함수] COLLECT - nested table 생성하여 집계(나열)
728x90

COLLECT

 

구문

COLLECT( [ DISTINCT | UNIQUE ] column [ ORDER BY expr ] )

 

목적

COLLECT는 인자로 임의의 유형의 column을 취하고 선택된 행들로부터 입력 유형의 nested table을 생성하는 집계 함수입니다. 이 함수를 정확한 결과를 얻기 위해서는 CAST 함수 내에서 사용해야 합니다.

만약 column이 자체적으로 컬렉션인 경우, COLLECT의 출력은 컬렉션의 nested table이 됩니다. column이 사용자 정의 유형인 경우, 선택적으로 DISTINCT, UNIQUEORDER BY 절을 사용하려면 해당 column에 MAP 또는 ORDER 메소드가 정의되어 있어야 합니다.

 

참고:

 

예제

다음 예제는 샘플 테이블 oe.customers의 varray column인 전화번호에서 nested table을 생성합니다. nested table에는 소득 수준이 L: 300,000 이상인 고객들의 전화번호만 포함됩니다.

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의 창고 이름 column으로부터 nested table을 생성합니다. 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')

 


출처: 오라클 레퍼런스

원문 링크: Oracle COLLECT 함수 문서

 

반응형

댓글