2017-03-10 1 views
0

두꺼비를 사용하여 오라클 데이터베이스에서 이미지를 추출하려면이 코드를 사용하지만 추출한 이미지를 저장할 위치를 선언 할 때 문제가 발생합니다. 이 이미지를 로컬 컴퓨터의 C : \ Images \ 폴더에 저장하겠습니다. 가능합니까? 아니면 디렉토리를 어떻게 지정해야합니까?UTL_FILE.FOPEN() 디렉토리 경로를 선언하고 지정하는 방법은 무엇입니까?

난 당신이 파일 항상이 문제를 해결할 어떤 PL/SQL 스크립트를 실행할 때 코드가, Invalid file operation

DECLARE 
t_blob BLOB; 
t_len NUMBER; 
t_file_name VARCHAR2(100); 
t_output UTL_FILE.file_type; 
t_TotalSize number; 
t_position number := 1; 
t_chucklen NUMBER := 4096; 
t_chuck raw(4096); 
t_remain number; 
BEGIN 
-- Get length of blob 
SELECT DBMS_LOB.getlength (PHOTO), ename || '_1.jpg' 
INTO t_TotalSize, t_file_name FROM DEMO WHERE ENAME ='moon'; 
t_remain := t_TotalSize; 
-- The directory TEMPDIR should exist before executing 
t_output := UTL_FILE.fopen ('C:\Images\', t_file_name, 'wb', 32760); 
-- Get BLOB 
SELECT PHOTO INTO t_blob FROM DEMO WHERE ENAME ='moon'; 
-- Retrieving BLOB 
WHILE t_position < t_TotalSize 
LOOP 
DBMS_LOB.READ (t_blob, t_chucklen, t_position, t_chuck); 
UTL_FILE.put_raw (t_output, t_chuck); 
UTL_FILE.fflush (t_output); 
t_position := t_position + t_chucklen; 
t_remain := t_remain - t_chucklen; 
IF t_remain < 4096 
THEN 
t_chucklen := t_remain; 
END IF; 
END LOOP; 
END; 
+1

[UTL \ _FILE.FOPEN() 프로 시저가 디렉토리에 대한 경로를 허용하지 않음?] (http://stackoverflow.com/questions/2751113/utl-file-fopen-procedure-not-accepting-path-for) -directory) – Nitish

+0

db의 클라이언트 또는 로컬 시스템의 로컬 시스템? –

답변

0

당신이 DIRECTORY 객체를 사용한다

create or replace directory my_dir as 'c:\Images\'; 

declare 
v_dir varchar2(10) := 'MY_DIR'; 
..... 
begin 
.... 
t_output := utl_file.fopen(v_dir, t_file_name, 'wb', 32760); 
.... 
+0

이 스크립트는 Oracle Instance가 실행되는 동일한 시스템에서 실행되는 경우에만 작동합니다. – hackvan

+0

고마워요. 처음 코드에 코드를 추가했지만, 이제이 오류가 발생합니다. '09:31:28 오류 : ORA-00911 : 잘못된 문자입니다.' – Muzurl

0

먼저 알고 무엇입니까 실행할 때 oracle 인스턴스를 실행하는 서버의 범위로 실행하십시오.

이 경우 Oracle을 실행하는 서버에 경로 "C : \ Image \"가 있어야합니다.

사용할 수있는 전략 중 하나는 서버의 폴더로 스크립트를 실행 한 다음 터미널/콘솔의 복사 명령을 통해 폴더 데이터를 얻는 것입니다.