이진 데이터 타입
- 이진자료 타입으로 저장된 자료는 오라클에서 해석되거나 변환되지 않는다.

1. RAW
- 이진자료 저장
- 2000BYTE까지 저장 가능(인덱스 처리 가능)
- 2진수, 16진수 형태의 자료 처리
사용형식)
컬럼명 RAW(크기)
사용예)
CREATE TABLE TEMP06(
COL1 RAW(1000),
COL2 RAW(1000)
);
INSERT INTO TEMP06 VALUES('1010010111111100',HEXTORAW('A5FC'));
SELECT * FROM TEMP06;

2. BFILE
- 4GB 까지의 이진자료 저장
- 원본자료를 DB밖에 저장하고 테이블에는 경로와 파일명만 저장
- 자주 변경되는 자료저장에 효율적인 방식
- 경로표현을 위한 디렉토리 개체 사용
사용형식)
컬럼명 BFILE
사용예)
1)테이블 생성
CREATE TABLE TEMP07(
COL1 BFILE
);
2)원본파일을 해당 폴더에 저장
D:\A_TeachingMaterial\02_Oracle\work\sample.jpg
3)디렉토리 개체 생성
CREATE OR REPLACE DIRECTORY 별칭 AS '절대경로';
CREATE OR REPLACE DIRECTORY TEST_DIR AS 'D:\A_TeachingMaterial\02_Oracle\work'
4)테이블에 삽입
INSERT INTO TEMP07 VALUES(BFILENAME('TEST_DIR', 'sample.jpg'));
SELECT * FROM TEMP07;

3. BLOB
- 4GB 까지의 이진자료 저장
- 원본자료를 DB안에 저장
- 자주 변경되지 않는 자료저장에 효율적인 방식
- PL/SQL 의 프로시저나 함수를 사용
사용형식)
컬럼명 BLOB
사용예)
1)테이블생성
CREATE TABLE TEMP08(
NO NUMBER,
BLOB_FILE BLOB
);
2)시퀀스 생성
CREATE SEQUENCE seq_blob
START WITH 1;
3)입력 프로시져 생성
CREATE OR REPLACE PROCEDURE proc_blob_insert(V_FILENAME IN VARCHAR2)
IS
V_LOCATOR_BLOB BLOB;
V_SOURCE_FILE_NAME BFILE:=BFILENAME('TEST_DIR',V_FILENAME);
V_DEST_OFFSET NUMBER:=1;
V_SRC_OFFSET NUMBER:=1;
BEGIN
INSERT INTO TEMP08(NO,BLOB_FILE) VALUES(seq_blob.NEXTVAL,EMPTY_BLOB())
RETURNING BLOB_FILE INTO V_LOCATOR_BLOB;
DBMS_LOB.OPEN(V_SOURCE_FILE_NAME,DBMS_LOB.LOB_READONLY);
DBMS_LOB.LOADBLOBFROMFILE(V_LOCATOR_BLOB,
V_SOURCE_FILE_NAME,
DBMS_LOB.GETLENGTH(V_SOURCE_FILE_NAME),
V_DEST_OFFSET,
V_SRC_OFFSET);
DBMS_LOB.CLOSE(V_SOURCE_FILE_NAME);
COMMIT;
END;
4)삽입실행
EXECUTE proc_blob_insert('sample.jpg');
5)결과확인
SELECT * FROM TEMP08;
