여러 개의 데이터 값을 하나의 속성에 저장할 수 있도록 하는 것은 관계형 데이터베이스의 확장 기능이다. 컬렉션의 각 원소는 서로 다른 데이터 타입이 될 수도 있고, 심지어 서로 다른 클래스(단, 가상 클래스 제외) 도메인으로 가질 수도 있다. 예를 들어, SET (INTEGER, tbl_1)은 정수, 또는 사용자가 정의한 클래스 tbl_1의 행 값의 집합을 도메인으로 지정할 수 있다. 또한, SET ( )과 같이 도메인 리스트를 지정하지 않으면 사용자 정의 클래스를 포함한 모든 데이터 타입을 원소로 허용한다는 의미이다.
도메인 리스트가 두 개 이상인 컬렉션 타입 컬럼의 데이터를 조회할 수 있는 환경은 csql 유틸리티와 CCI API이며, CUBRID 매니저 및 그 밖의 CUBRID API(JDBC, ODBC, OLEDB, PHP)에서는 조회할 수 없음을 유의한다.
CUBRID가 지원하는 집합형 데이터 타입
타입 |
설명 |
타입 정의 |
입력 데이터 |
저장 데이터 |
---|---|---|---|---|
SET |
중복을 허용하지 않는 합집합 |
col_name SET VARCHAR(20 |
{'c','c','c','b','b', 'a'} |
{'a','b','c'} |
MULTISET |
중복을 허용하는 합집합 |
col_name MULTISET VARCHAR(20) |
{'c','c','c','b','b', 'a'} |
{'a','b','b','c','c','c'} |
LIST |
중복을 허용하고, 데이터 입력 순서대로 저장하는 합집합 |
col_name LIST VARCHAR(20) |
{'c','c','c','b','b', 'a'} |
{'c','c','c','b','b','a'} |
위의 표에 나타난 바와 같이, 컬렉션 타입으로 지정되는 값은 중괄호('{', '}') 안에 각 값들을 쉼표(,)로 구분하여 나열할 수 있다.
변환(Coercions)
컬렉션 타입은 지정된 도메인이 같다면 CAST 연산자를 이용하여 명시적으로 타입 변환이 가능하다. 아래 표는 명시적 변환이 가능한 컬렉션 타입에 관한 것이다.
명시적 변환이 가능한 컬렉션 타입
|
TO |
|||
---|---|---|---|---|
FROM |
|
SET |
MULTISET |
LIST |
SET |
- |
O |
O |
|
MULTISET |
O |
- |
X |
|
LIST |
O |
O |
- |