2011-04-18 5 views
2

PL/SQL 스크립트에서 로컬 파일에 쓰려고합니다. 이 작업을 수행하기 위해 PL/SQL에서 TEXT_IO 패키지를 사용하려고합니다. 나는이 스크립트를 실행할 때PL/SQL TEXT_IO 패키지

DECLARE 
file_out text_io.file_type; 
len number; 
blob_file blob; 
my_var RAW(50); 
bstart NUMBER := 1; 
bytelen NUMBER := 50; 

BEGIN 

SELECT xxx 
INTO blob_file 
FROM yyy 
WHERE zzz 

dbms_lob.read(blob_file, bytelen, bstart, my_var);  
file_out := text_io.fopen('local_file_path', 'w'); 
text_io.put_raw(file_out, my_var); 
text_io.fflush(file_out); 
text_io.fclose(file_out); 

END; 
/

quit 

, 나는 오류가

PLS-00201: identifier 'TEXT_IO.FILE_TYPE' must be declared 

사람이 내가이 오류를 해결할 수있는 방법을 알고 있나요 얻을, 나는 같은 파일에 블롭의 내용을 쓸 수있는 방법 내가하려고하는거야?

감사합니다, (기존의 클라이언트/서버 일)

답변

6

TEXT_IO 만했다 오라클 형태로 존재
KTM 클라이언트 측 PL/SQL 인터프리터. PL/SQL을 실행하기 위해 SQL * Plus를 사용하고 있다면 여기에서와 같이 TEXT_IO 패키지를 사용할 수 없으며 클라이언트 시스템의 파일에 쓸 수 없습니다. 서버는 클라이언트가 노출하고있는 드라이브를 마운트 한 다음 마운트를 계속 진행합니다).

이제 SQL * Plus를 사용하여 SPOOL 명령을 사용하여 로컬 파일에 직접 쓸 수 있습니다. 불행히도 일반적인 경우에 BLOB에 대해이 작업을 수행 할 가능성은 거의 없습니다.

+0

나는 본다. 하하,이 모든 작업은 매우 복잡합니다 ... BLOB을 다운로드하기위한 간단한 Java 프로그램을 작성하는 것만으로 생각합니다. – ktm5124

1

일반적인 접근 방법은 서버에 파일을 작성하고 다운로드하는 것입니다. 또는 이벤트를 더 잘 기록하고 쓰지 말고 그냥 스트리밍하십시오. 상당히 복잡합니다.

0

서버에 파일을 작성하려면 UTL_FILE을 선택하는 것이 좋습니다. 이 패키지는 데이터베이스에 지정된 DIRECTORY에 파일을 쓸 수 있습니다. DIRECTORY는 CREATE DIRECTORY를 사용하여 Oracle에서 작성되며 DBMS (서버 측)가 액세스 할 수있는 쓰기 가능한 디렉토리에 링크 될 수 있습니다.

+0

OP가 * local * 파일을 쓰려고합니다. UTL_FILE을 사용하면 데이터베이스 서버가 호스트되는 것과 동일한 시스템에서 저장 프로시 듀어를 실행하는 경우 *를 제외하고 로컬 파일을 작성할 수 없습니다. 이것은 일반적으로 그렇지 않습니다. –