Oracle/Administration2018. 7. 12. 15:05

Java에서 CLOB 타입을 사용하는 경우 EMPTY_CLOB 함수로 초기화하는 것이 일반적이다. EMPTY_CLOB 함수로 초기화된 CLOB 타입의 동작을 살펴보자.


테스트를 위해 아래와 같이 테이블을 생성하자.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER, c2 CLOB);

INSERT INTO t1 VALUES (1, NULL);
INSERT INTO t1 VALUES (2, EMPTY_CLOB ());
INSERT INTO t1 VALUES (3, 'X');
COMMIT;

아래는 t1 테이블을 조회한 결과다. c1이 1, 2인 행의 c2 값이 없는 것으로 표시된다.

-- 2
SELECT * FROM t1;

C1 C2
-- --
 1
 2
 3 X

3 행이 선택되었습니다.

CLOB 타입으로 생성된 열은 아래의 세 가지 상태를 가질 수 있다.
---------------------------------------------------------
| C1 | 상태      | 설명                                 |
---------------------------------------------------------
|  1 | null      | 로케이터(locator)와 값(value)이 없음 |
|  2 | empty     | 로케이터는 존재하지만 값이 없음      |
|  3 | populated | 로케이터와 값이 존재함               |
---------------------------------------------------------

IS NULL 조건으로 조회하면 c1이 1인 행(상태가 null인 행)이 반환된다. EMPTY_CLOB 함수로 초기화된 값은 반환되지 않는다.

-- 3
SELECT * FROM t1 WHERE c2 IS NULL;

C1 C2
-- --
 1

1개의 행이 선택되었습니다.

IS NOT NULL 조건으로 조회하면 c1이 2, 3인 행(상태가 empty나 populated인 행)이 반환된다.

-- 4
SELECT * FROM t1 WHERE c2 IS NOT NULL;

C1 C2
-- --
 2
 3 X

2 행이 선택되었습니다.

EMPTY_CLOB 함수로 초기화된 행(상태가 empty인 행)을 조회하기 위해서는 아래와 같이 LENGTH 함수를 사용하면 된다.

-- 5
SELECT * FROM t1 WHERE LENGTH (c2) = 0;

C1 C2
-- --
 2

1개의 행이 선택되었습니다.

상태가 null이나 empty인 행을 조회하기 위해서는 아래와 같이 NULLIF 함수를 사용하며 된다.

-- 6
SELECT * FROM t1 WHERE NULLIF (LENGTH (c2), 0) IS NULL;

C1 C2
-- --
 1
 2

2 행이 선택되었습니다.


'Oracle > Administration' 카테고리의 다른 글

인덱스 브랜치 블록  (0) 2018.10.09
Online Statistics Gathering for Bulk Loads  (0) 2018.09.29
CLOB #3 - LONGCHUNKSIZE  (0) 2018.06.23
CLOB #2 - NVL 함수  (0) 2018.06.23
CLOB #1 - BASICFILE vs SECUREFILE  (0) 2018.06.23
Posted by 정희락_