ORACLE의 LOB 데이터 유형에 대해 알아보겠습니다. LOB 데이터 유형에는 CLOB, NCLOB, BLOB이 있습니다.
CLOB
CLOB (Character Large Object) 데이터 유형은 이름에서 알 수 있다시피 많은 문자 데이터를 저장하는 데이터 유형입니다. 앞서 문자 데이터 유형에서 설명한 VARCHAR2와 사용 용도가 비슷한 데이터 유형이지만 VARCAHR2는 4000Byte 길이 제한이 있습니다. 4000Byte 이상의 문자 데이터를 저장할 때 사용하는 데이터 유형이라 생각하시면 됩니다. CLOB은 로그, 텍스트, HTML, XML 등 많은 문자정보를 가지고 있는 데이터를 저장하는 데 사용되고 있습니다. 또한 이 데이터 유형은 DML(Data Manipulation Language) - SELECT, INSERT, UPDATE, DELETE가 가능합니다.
-- 테이블 생성시 CLOB데이터 유형을 사용하는 방법입니다.
CREATE TABLE TEST (
VAR1 NUMBER(10),
VAL2 CLOB
);
-- CLOB데이터 저장방법 입니다.
-- EMPTY_CLOB()은 CLOB 컬럼을 EMPTY로 만드는 함수로 LOB이 초기화가 되지만 데이터가 있지 않다는걸 의미합니다.
INSERT INTO TEST(VAL1, VAL2) VALUES (1, EMPTY_CLOB());
INSERT INTO TEST(VAL1, VAL2) VALUES (2, 'CLOB INSERT TEST');
-- CLOB데이터 조회하는 방법 입니다.
-- CLOB데이터 조회 시 꼭 조회 조건을 걸어줘야 합니다. 데이터 양이 많은 경우 BUFFER오류가 발생 할 수 있습니다.
SELECT VAL1 -- 데이터가 많은경우 일부만 보여지게 됩니다.
, DBMS_LOB.SUBSTR(VAL2, 1000, 1) -- VAL2내용중 1~1000길이까지의 내용만 보여줍니다.
, DBMS_LOB.SUBSTR(VAL2, DBMS_LOG.GETLENGTH(VAL2), 1) -- VAL2내용 전체를 보여줍니다.
FROM TEST
WHERE VAR1 = 2;
NCLOB
NCLOB(National Character Large Object) 데이터 유형은 CLOB데이터 유형과 비슷하지만 조금 더 큰 범위라고 볼 수 있습니다. NCLOB은 CLOB데이터 유형의 데이터는 물론이고 Unicode 문자열 데이터도 저장을 할 수 있습니다. NCLOB도 CLOB데이터와 마찬가지로 대용량 문자 데이터를 저장할 수 있으며 최대 4GB까지 저장이 가능하며 DML(Data Manipulation Language) - SELECT, INSERT, UPDATE, DELETE을 사용할 수 있습니다. 이 데이터 유형은 다국어 문서를 저장하거나 다국어 파일을 핸들링하는 등 다국어 언어지원 사용에 유용합니다.
-- 테이블 생성시 NCLOB데이터 유형을 사용하는 방법입니다.
CREATE TABLE TEST (
VAR1 NUMBER(10),
VAL2 NCLOB
);
-- NCLOB데이터 저장방법 입니다.
INSERT INTO TEST(VAL1, VAL2) VALUES (1, 'NCLOB INSERT TEST');
-- NCLOB데이터 조회하는 방법 입니다.
SELECT VAL1 -- 데이터가 많은경우 일부만 보여지게 됩니다.
, DBMS_LOB.SUBSTR(VAL2, 1000, 1) -- VAL2내용중 1~1000길이까지의 내용만 보여줍니다.
, DBMS_LOB.SUBSTR(VAL2, DBMS_LOG.GETLENGTH(VAL2), 1) -- VAL2내용 전체를 보여줍니다.
FROM TEST
WHERE VAR1 = 1;
BLOB
BLOB(Binary Large Object) 데이터 유형은 바이너리 대용량 데이터를 저장하는 데이터 유형입니다. CLOB, NCLOB과는 달리 이진 데이터로 구성이 되어있어 데이터의 구조와 크기가 일정하지 않을 수 있습니다. 이 데이터 유형도 DML(Data Manipulation Language) - SELECT, INSERT, UPDATE, DELETE을 사용할 수 있고 오디오, 이미지 비디오 등 이진 데이터로 저장하는데 유용합니다.
-- 테이블 생성시 BLOB데이터 유형을 사용하는 방법입니다.
CREATE TABLE TEST (
VAR1 NUMBER(10),
VAL2 BLOB
);
-- BLOB데이터 저장방법 입니다.
-- EMPTY_BLOB()은 LOB 컬럼을 EMPTY로 만드는 함수로 LOB이 초기화가 되지만 데이터가 있지 않다는걸 의미합니다.
INSERT INTO TEST(VAL1, VAL2) VALUES (1, EMPTY_BLOB());
-- PL/SQL로 BLOB 데이터를 추가하는 예제입니다.
-- WRITEAPPEND의 4는 추가할 데이터 길이이고 'abcd'는 추가할 데이터 입니다.
DECLARE
my_blob BLOB;
BEGIN
SELECT VAL2 INTO my_blob FROM TEST WHERE id = 1 FOR UPDATE;
DBMS_LOB.WRITEAPPEND(VAL2, 4, 'abcd');
COMMIT;
END;
-- PL/SQL로 BLOB 데이터를 수정하는 예제입니다.
-- WRITE의 4는 수정할 데이터의 길이이며, 1은 수정할 데이터의 시작 위치, 'efgh'는 수정할 데이터 입니다.
DECLARE
my_blob BLOB;
BEGIN
SELECT VAL2 INTO my_blob FROM TEST WHERE id = 1 FOR UPDATE;
DBMS_LOB.WRITE(VAL2, 4, 1, 'efgh');
COMMIT;
END;
오늘은 ORACLE LOB 데이터 유형에 대해 알아봤습니다. 많은 도움 되셨길 바랍니다.
'IT정보' 카테고리의 다른 글
ORACLE 테이블 생성/수정/삭제/복사 (0) | 2023.04.22 |
---|---|
SQL 기본 문법 (0) | 2023.04.20 |
ORACLE 날짜 및 시간 데이터 유형 (0) | 2023.04.18 |
ORACLE 숫자 데이터 유형 (0) | 2023.04.17 |
ORACLE 문자 데이터 유형 (0) | 2023.04.16 |
댓글