Versions available for this page: CUBRID 9.0.0 |
ENUM 타입은 열거형 문자열 상수들로 정의되는 타입이다. ENUM으로 정의된 칼럼의 값은 지정한 문자열 원소만이 허용되며, 열거 원소의 최대 개수는 65535이다. ENUM 타입 칼럼에서 각 값은 열거 원소가 256개 미만이면 1바이트, 256개 이상이면 2바이트로 저장된다. ENUM의 값은 수치형 타입 혹은 문자열 타입이 사용될 수 있다.
ENUM 타입 칼럼은 숫자로 취급하며, 질의에서 비교 대상의 값이 CHAR/VARCHAR인 경우에도 ENUM 타입의 대응되는 색인 번호 숫자 값으로 간주한다.
<enum_type>
: ENUM '(' <char_string_literal_list> ')'
<char_string_literal_list>
: <char_string_literal_list> ',' CHAR_STRING
| CHAR_STRING
다음은 ENUM 칼럼 정의의 예이다.
CREATE TABLE tbl (
color ENUM('red', 'yellow', 'blue')
);
칼럼 color는 다음 값 중 하나를 가질 수 있다.:
|
값 |
색인 번호 |
|---|---|
|
NULL |
NULL |
|
'red' |
1 |
|
'yellow' |
2 |
|
'blue' |
3 |
다음은 ENUM 칼럼으로 값을 삽입한 예이다.:
INSERT into tbl values ('yellow'), ('red'), (2), ('blue');
다음은 위에서 값을 삽입한 ENUM 칼럼을 조회하는 SELECT 문의 예이다.:
SELECT color FROM tbl;
color
======================
yellow
red
yellow
blue
SELECT color FROM tbl ORDER BY color ASC;
color
======================
red
yellow
yellow
blue
SELECT color FROM tbl ORDER BY cast(color as char) ASC;
color
======================
blue
red
yellow
yellow
SELECT CONCAT(enum_col, 'color') FROM tbl_name;
CONCAT(color, '_color')
======================
yellow_color
red_color
yellow_color
blue_color
SELECT color + 0 FROM tb;
color + 0
======================
2
1
2
3
-- will use the ENUM index value because it is compared with a number
SELECT color FROM tbl WHERE color <= 1;
color
======================
red
-- will use the ENUM char literal value because it is compared with a CHAR type
SELECT color FROM tbl WHERE color <= 'red';
color
======================
red
blue
CREATE TABLE tb2 (nums enum('0', '1', '2'));
INSERT INTO tb2 (nums) VALUES(1),('1'),('3');
SELECT * FROM tb2;
nums
======================
0
1
2
SELECT color FROM tb ORDER BY cast(color as char) ASC;
|
타입 |
값(색인 번호/문자열) |
|---|---|
|
*SHORT |
색인 번호 |
|
*INTEGER |
색인 번호 |
|
*BIGINT |
색인 번호 |
|
*FLOAT |
색인 번호 |
|
*DOUBLE |
색인 번호 |
|
*NUMERIC |
색인 번호 |
|
*MONETARY |
색인 번호 |
|
*TIME |
문자열 |
|
*DATE |
문자열 |
|
*DATETIME |
문자열 |
|
*TIMESTAMP |
문자열 |
|
*CHAR |
문자열 |
|
*VARCHAR |
문자열 |
|
BIT |
문자열 |
|
VARBIT |
문자열 |
SELECT * FROM tb WHERE color=0;
|
타입1 |
타입2 |
결과 타입 |
|---|---|---|
|
SHORT |
ENUM |
SHORT |
|
INTEGER |
ENUM |
INTEGER |
|
BIGINT |
ENUM |
BIGINT |
|
FLOAT |
ENUM |
FLOAT |
|
DOUBLE |
ENUM |
DOUBLE |
|
NUMERIC |
ENUM |
NUMERIC |
|
MONETARY |
ENUM |
MONETARY |
|
TIME |
ENUM |
TIME |
|
DATE |
ENUM |
DATE |
|
DATETIME |
ENUM |
DATETIME |
|
TIMESTAMP |
ENUM |
TIMESTAMP |
|
CHAR |
ENUM |
CHAR |
|
VARCHAR |
ENUM |
VARCHAR |
ENUM 타입이 JDBC, CCI 등 각종 드라이버에 특별하게 매핑되지 않는다. 따라서 응용 개발자는 STRING 타입을 사용하는 것처럼 사용하면 된다. 다음은 JDBC 응용의 예이다.
Statement stmt = connection.createStatement(“SELECT color FROM tbl”);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
System.out.println(rs.getString());
}
다음은 CCI 응용의 예이다.
req_id = cci_prepare (conn, “SELECT color FROM tbl”, 0, &err);
error = cci_execute (req_id, 0, 0, &err);
if (error < CCI_ER_NO_ERROR)
{
/* handle error */
}
error = cci_cursor (req_id, 1, CCI_CURSOR_CURRENT, &err);
if (error < CCI_ER_NO_ERROR)
{
/* handle error */
}
error = cci_fetch (req_id, &err);
if (error < CCI_ER_NO_ERROR)
{
/* handle error */
}
cci_get_data (req, idx, CCI_A_TYPE_STR, &data, 1);
CREATE TABLE tb (
color ENUM('red', CONCAT('light ','gray'), 'blue')
);