BLOB Oracle 10g에 이미지 삽입
BLOB 필드에 이미지를 삽입하려고 하는데 테이블에서 선택하여 보고서에 렌더링할 것입니다.어떻게 이미지를 테이블에 넣는지 알 수가 없습니다.그러나 제가 삽입을 했는데, 제가 렌더링할 때는 이미지 자체가 아니라 이미지 경로만 보고서에 나와 있었습니다.
테이블
CREATE TABLE esignatures (
office NUMBER(6,0) NOT NULL,
username VARCHAR2(10) NOT NULL,
iblob BLOB NOT NULL
)
INSERT 문(SQL)
INSERT INTO esignatures
VALUES (100, 'BOB', utl_raw.cast_to_raw('C:\pictures\image1.png'));
String 위치를 HEX 값 형태로 삽입하는 것을 확실히 알고 있습니다. 어떻게 하면 테이블에서 이미지 HEX 값을 얻을 수 있을까요? 그래서 렌더링할 때 이미지가 표시되는 것을 볼 수 있습니다.
pl/sql에서 로컬 디렉토리에 액세스할 수 없습니다.bfile을 사용하면 Oracle이 실행 중인 서버에 이미지를 넣어야 하는 디렉토리(create directory)를 설정합니다.
로컬 컴퓨터에서 몇 개의 이미지를 삽입하려면 클라이언트 사이드 앱이 있어야 합니다.당신이 직접 쓰실 수 있지만, 저는 보통 Toad를 사용합니다.스키마 브라우저에서 테이블을 클릭합니다.데이터 탭을 클릭하고 + 기호를 눌러 행을 추가합니다.BLOB 열을 두 번 클릭하면 마법사가 열립니다.맨 왼쪽 아이콘이 이미지를 블롭에 로드합니다.
SQL 개발자도 비슷한 기능을 가지고 있습니다.아래 "Load" 링크 참조:
이미지를 선 위로 끌어내야 할 경우 pl/sql을 사용하여 수행할 수 있지만 단순하지는 않습니다.먼저 사용자가 와이어를 풀오버할 수 있도록(보안상의 이유로) ACL 목록 액세스를 설정해야 합니다.ACL 설정에 대한 자세한 내용은 이 문서를 참조하십시오.
ACL이 완료되었다고 가정하면 다음과 같이 이미지를 당깁니다.
declare
l_url varchar2(4000) := 'http://www.oracleimg.com/us/assets/12_c_navbnr.jpg';
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_raw RAW(2000);
l_blob BLOB;
begin
-- Important: setup ACL access list first!
DBMS_LOB.createtemporary(l_blob, FALSE);
l_http_request := UTL_HTTP.begin_request(l_url);
l_http_response := UTL_HTTP.get_response(l_http_request);
-- Copy the response into the BLOB.
BEGIN
LOOP
UTL_HTTP.read_raw(l_http_response, l_raw, 2000);
DBMS_LOB.writeappend (l_blob, UTL_RAW.length(l_raw), l_raw);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(l_http_response);
END;
insert into my_pics (pic_id, pic) values (102, l_blob);
commit;
DBMS_LOB.freetemporary(l_blob);
end;
도움이 되길 바랍니다.
당신은 다음과 같은 일을 해야 합니다.
1) 디렉토리 개체 만들기서버측 액세스 가능 폴더를 가리킬 대상
CREATE DIRECTORY image_files AS '/data/images'
/
2) OS 폴더 디렉터리 개체 지점에 파일 배치
3) 파일에서 테이블로 데이터를 로드할 Oracle 스키마에 필요한 액세스 권한을 부여합니다.
GRANT READ ON DIRECTORY image_files TO scott
/
4) 아래와 같이 BFILENAME, EXHIT_BLOB 기능 및 DBMS_LOB 패키지(테스트되지 않은 예 - 주의)를 사용합니다.
DECLARE
l_blob BLOB;
v_src_loc BFILE := BFILENAME('IMAGE_FILES', 'myimage.png');
v_amount INTEGER;
BEGIN
INSERT INTO esignatures
VALUES (100, 'BOB', empty_blob()) RETURN iblob INTO l_blob;
DBMS_LOB.OPEN(v_src_loc, DBMS_LOB.LOB_READONLY);
v_amount := DBMS_LOB.GETLENGTH(v_src_loc);
DBMS_LOB.LOADFROMFILE(l_blob, v_src_loc, v_amount);
DBMS_LOB.CLOSE(v_src_loc);
COMMIT;
END;
/
이 후에는 파일의 내용을 BLOB 열로 가져올 수 있으며 예를 들어 Java를 사용하여 파일을 다시 가져올 수 있습니다.
edit: 한 글자가 누락되었습니다. LOADFROMFILE이어야 합니다.
언급URL : https://stackoverflow.com/questions/21855935/inserting-image-into-blob-oracle-10g
'source' 카테고리의 다른 글
조건이 null인 경우 기본값으로 행 추가 (0) | 2023.10.19 |
---|---|
일반 자바스크립트 jQuery.param()과 동등한 jQuery.param() (0) | 2023.10.19 |
Android 에뮬레이터에서 화면 방향을 변경하려면 어떻게 해야 합니까? (0) | 2023.10.19 |
@ngrx/store로 상태 개체의 현재 값을 가져오는 방법은 무엇입니까? (0) | 2023.10.19 |
Oracle이 데이터베이스 테이블의 행에 NaN을 추가하는 시기/이유 (0) | 2023.10.19 |