2017-03-10 17 views
0

私はトッドを使用してOracleデータベースから画像を抽出するためにこのコードを持っていますが、抽出した画像を保存するディレクトリを宣言するときに問題があります。これらのイメージをローカルマシンの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

ディレクトリ・オブジェクトを使用する必要があり、

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インスタンスが実行されているのと同じマシンで実行される場合にのみ機能します。 – hackvan

+0

ありがとう、最初のコードにこのコードを追加しましたが、このエラーが発生しました。 '09:31:28 Error:ORA-00911:無効な文字です。 – Muzurl

0

まず知っているを取得しています実行したときにoracleインスタンスを実行するサーバーのスコープ内に実行します。

この場合、パス "C:\ Image \"は、Oracleが実行するサーバー上に存在する必要があります。

あなたが使用できる戦略の1つは、サーバのフォルダにスクリプトを実行し、ターミナル/コンソールの[コピーコマンド]を使用してフォルダデータを取得することです。

関連する問題