Oracle Database는 CLOB 값을 바이트 단위로 자르는 기능을 제공하지 않습니다. CLOB 값을 바이트 단위로 자르려면 조금 복잡한 표현식을 사용해야 합니다.
테스트를 위해 아래와 같이 테이블을 생성하겠습니다.
-- 1
DROP TABLE t1 PURGE;
CREATE TABLE T1 (c1 CLOB);
INSERT INTO t1 VALUES ('가나다라마바사아자차카타파하');
COMMIT;
SUBSTRB 함수는 CLOB 타입을 지원하지 않습니다. SUBSTR 함수와 DBMS_LOB.SUBSTR 함수는 글자 단위로 CLOB 값을 자르며, SUBSTR 함수는 CLOB 타입, DBMS_LOB.SUBSTR 함수는 VARCHAR2 타입을 반환합니다.
-- 2-1
SELECT SUBSTRB (c1, 1, 10) AS c1 FROM t1;
ORA-22998: CLOB or NCLOB in multibyte character set not supported
-- 2-2
SELECT SUBSTR (c1, 10, 1) AS c1 FROM t1;
C1
--------------------
가나다라마바사아자차
1 row selected.
-- 2-2
SELECT DBMS_LOB.SUBSTR (c1, 10, 1) AS c1 FROM t1;
C1
--------------------
가나다라마바사아자차
1 row selected.
아래 쿼리에 사용한 표현식으로 CLOB 값을 바이트 단위로 자를 수 있습니다.
-- 3
SELECT SUBSTRB (DBMS_LOB.SUBSTR (c1, 20), 1, 10) AS c1 -- SUBSTRB (c1, 1, 10)
, LTRIM (c1, SUBSTRB (DBMS_LOB.SUBSTR (c1, 20), 1, 10)) AS c2 -- SUBSTRB (c1, 10)
FROM t1;
C1 C2
---------- ------------------
가나다라마 바사아자차카타파하
1 row selected.