LOB이란? |
LOB은 TEXT,그래픽,이미지,비디오,사운드 등 구조화 되지 않은 대형 데이터를 저장하는데 사용된다. |
(멀티미디어 데이터는 크기가 크고 구조화된 데이터들은 크기가 작다.그래서 LOB을 만들었다.) |
|
*한국의 협업시 이미지 파일을 다루는 방법 |
DB에서 저장된 이미지 파일을 찾아서 프로젝트를 진행하는 것보다 OS상에서 파일을 저장하고 |
저장해둔 곳의 주소값만 DB에 저장해 주소를 타고 이미지를 불러오는 방법을 사용하고 있다. |
|
|
|
LOB의 종류 ? |
CLOB : 문자 대형 객체(Character),Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행(최대 4G 저장) |
BLOB : 이진 대형 객체(Binary),이미지,동영상,MP3 등을 저장한다. (최대 4G 저장) |
NCLOB : 내셔널 문자 대형객체(National),오라클에서 정의되는 National Character Set을 따르는 문자(최대 4G 저장) |
BFILE : OS에 저장되는 이진 파일의 이름과 위치를 저장. 읽기 전용 모드로만 액세스가 가능하다. (최대 4G 저장) |
|
|
|
|
*데이터베이스 내부, 외부에 따라 사용되는 LOB |
내부: BLOB,CLOB,NCLOB,- Table에 LOB 형식의 컬럼을 생성하고 이곳에 데이터의 실제 위치를 가리키는 Locator 저장한다. |
외부 : BFILE 사용 |
|
특징 |
하나의 테이블에 여러 개의 LOB 열(column)이 가능하다. |
|
|
|
-- LOB 타입 컬럼을 포함한 테이블 생성 |
-- 제약사항 : LOB 타입 컬럼을 cluster key로 사용하는 클러스터 테이블 생성 불가 |
CREATE TABLE LOB_TEST |
(ID NUMBER, |
CLOB CLOB, --CLOB |
BLOB BLOB, --BLOB |
NCLOB NCLOB, --NCLOB |
BFILE BFILE) --BFILE ; |
|
|
-- LOB 데이터 저장 |
INSERT INTO LOB_TEST |
VALUES(1 |
,'AXIOM' -- CLOB |
,UTL_RAW.CAST_TO_RAW('Hello') --BLOB |
,'엑시엄' --NCLOB |
,BFILENAME(null,null)); |
-- BFILENAME('경로or디렉토리객체명','파일명')) |
|
|
-- LOB 데이터 조회 |
-- 일반 조회(컬럼 내용 중 일부는 조회되지 않음) |
SELECT * FROM LOB_TEST; |
|
ID CLOB BLOB NCLOB BFILE |
------- -------- ---------- ------ ----------------- |
1 AXIOM 48656C6C6F 엑시엄 bfilename(NULL) |
|
|
|
-- 컬럼 길이 조회 |
SELECT ID |
,DBMS_LOB.GETLENGTH(CLOB) CLOB |
,DBMS_LOB.GETLENGTH(BLOB) BLOB |
,DBMS_LOB.GETLENGTH(NCLOB) NCLOB |
,DBMS_LOB.GETLENGTH(BFILE) BFILE |
FROM LOB_TEST; |
|
ID CLOB BLOB NCLOB BFILE |
------ ---------- ---------- ---------- ---------- |
1 5 5 3 |