기타 자료형
이진자료(BINARY DATA)를 저장하기 위한 데이터 타입
RAW, LONG RAW, BLOB, BFILE 등이 제공됨. BLOB, BFILE 을 위주로 사용
이진 자료는 오라클에 의해 해석되거나 변환되지 않음.
BLOB 는 DB안에 저장 BFILE 은 DB밖에 경로정보만 저장
1) RAW
. 상대적으로 작은 단위의(젤작은) 2진 자료 저장
. 작은 양이라 인덱스 처리가 가능
. 최대 2000 BYTE 처리 가능.
. 16진수 및 2진수의 형태로 저장
(사용형식)
컬럼명 RAW(크기);
사용예)
CREATE TABLE TEMP08(
COL1 RAW(2000));
INSERT INTO TEMP08 VALUES (HEXTORAW('2ADD'));
INSERT INTO TEMP08 VALUES ('2A7F');
INSERT INTO TEMP08 VALUES('0010101001111111');
SELECT * FROM TEMP08;
2) BFILE
. 이진자료 저장방식
. 대상의 자료는 데이터베이스 외부에 저장되고 데이터베이스는 경로정보와 파일명만 저장
. 최대 4GB까지 처리 가능
(사용형식)
컬럼명 BFILE;
사용예) CREATE TABLE TEMP09(COL1 BFILE);
** 사진자료 저장 순서
1. 자료 준비(절대경로 파악)
절대경로: 'D:\A_TeachingMaterial\2.Oracle'
2. 디렉토리 객체 생성
CREATE DIRECTORY 디렉토리 이름 AS 경로명
CREATE DIRECTORY TEST_DIR AS 'D:\A_TeachingMaterial\2.Oracle';
3. 데이터 삽입
INSERT INTO TEMP09
VALUES(BFILENAME('TEST_DIR','sample.jpg'));
SELECT * FROM TEMP09;
-> 해석안되기 때문에 사용자가 작성한 경로와 파일명만 나옴.
3)BLOB
. 이진데이터 처리 데이터 타입
. 원본자료(사진, 동영상 등)를 데이터베이스 내부에 저장
. 4GB까지 저장 가능
(사용형식)
컬럼명 BLOB;
사용예)
CREATE TABLE TEMP10(COL BLOB);
** 저장순서
1. 테이블 준비
2. 디렉토리 객체 생성
3. 데이터 삽입(INSERT문으로 직접 삽입할 수 없다 때문에 여러개의 변수 필요 절차적 언어 PL_SQL써야함, 익명블록(PL/SQL문) 등 사용)
:= 할당연산자로 자바의 ==와 똑같음.
DECLARE
L_DIR VARCHAR2(20):= 'TEST_DIR';
L_FILE VARCHAR2(30):= 'sample.jpg';
L_BFILE BFILE;
L_BLOB BLOB;
BEGIN
INSERT INTO TEMP10(COL) VALUES(EMPTY_BLOB())
RETURN COL INTO L_BLOB;
-- A INTO B 는 B:=A A값을 B에 할당해라
L_BFILE:=BFILENAME(L_DIR,L_FILE);
DBMS_LOB.FILEOPEN(L_BFILE, DBMS_LOB.FILE_READONLY);
-- FILEOPEN -> B_FILE에 있는 데이터를 READONLY 형식으로 열어라.
읽기전용이아니면 그림파일이 수정될 수 있음
DBMS_LOB.LOADFROMFILE(L_BLOB, L_BFILE, DBMS_LOB.GETLENGTH(L_BFILE));
-- B_FILE이 가지고 있는 길이를 정해서 B
_FILE에 있는 데이터를 떠내서 BLOB=데이터베이스 안에 저장하라.
DBMS_LOB.FILECLOSE(L_BFILE);
COMMIT;
END;
SELECT * FROM TEMP10;