4KB가 넘는 이미지 데이터가 hex string으로 존재하고 이를 이미지 형태로 ORACLE 테이블에 입력하는 예제입니다.
먼저 아래와 같은 함수를 만듭니다. 함수는 stack overflow의 글에서 참조했습니다.
기본적인 기능만 있어 예외처리가 필요할 수 있습니다.
create or replace function hextoblob(data in clob) return blob
is
v_blob blob;
v_start pls_integer := 1;
v_buffer pls_integer := 4000;
begin
dbms_lob.createtemporary(v_blob, true);
for i in 1..ceil(dbms_lob.getlength(data) / v_buffer)
loop
dbms_lob.append(v_blob, hextoraw(DBMS_LOB.SUBSTR(data, v_buffer, v_start)));
v_start := v_start + v_buffer;
end loop;
return v_blob;
end;
위의 예제는 NULL값 처리는 제외된 내용입니다. 관련 내용은 아래 링크를 참고해주세요.
작업 전에 hex string 데이터를 CLOB 필드에 입력합니다.
$ sqlplus scott/tiger
SQL> create table img (img clob);
Table created.
$ cat img.ctl << SQL*Loader control file
load data
infile '/work2/INFORMIX/1150FC9W3/HDR_PRI/unload/img.unl'
append
into table img
( IMG CHAR(1000000) )
$ sqlldr userid=scott/tiger control='./img.ctl'
SQL*Loader: Release 11.2.0.1.0 - Production on Tue Nov 22 10:51:25 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 1
그리고 입력된 hex string 을 4000바이트씩 자른 후, hextoraw 함수로 변환하는 것입니다.
hextoraw 함수는 CHAR, VARCHAR2, NCHAR, NVARCHAR2 타입만 지원하므로 잘라서 처리해야 합니다.
SQL> create table test_lob (img blob);
Table created.
insert into test_lob select hextoblob(img) from img;
1 row created.
참조 사이트:
'Oracle > oracle' 카테고리의 다른 글
Investigation of the 11g Oracle*Net connection delay when DNS server is unreachable (1) | 2023.10.12 |
---|---|
오라클에서 access 파일 조회하기 (0) | 2019.08.01 |
Windows 7 64 bit에서 Oracle 11g Client 설치 문제 (0) | 2013.02.15 |
hash_value VS sql_id (0) | 2012.07.17 |
TRANSLATE 함수 사용법 (0) | 2012.01.04 |