2017-04-04 2 views
1

私はこのスクリプトをplsqlに持っています。データベースに100レコードあり、コードすべてのレコードを抽出していますが、それらは空白のファイルです。何が問題なのでしょうか。複数のレコードを抽出するときにplsqlスクリプトから空のjpgファイルが生成される理由

以下はコードブロックです。ご了承ください。

--create or replace directory my_dir as '/export/home/Desktop/Pic'; 

DECLARE 

v_dir varchar2(10):='MY_DIR'; 
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 
FOR i IN 1..100 LOOP 


SELECT DBMS_LOB.getlength (IMAGE), brid ||'P.jpg' 
    INTO t_TotalSize, t_file_name FROM Photo WHERE IMAGEID=i; 

IF (t_file_name IS NOT NULL) THEN 


dbms_output.put_line('Got: ' || t_file_name); 

t_remain := t_TotalSize; 
t_output := UTL_FILE.fopen (v_dir, t_file_name, 'WB', 32760); 

SELECT IMAGE INTO t_blob FROM Photo WHERE IMAGEID=i; 

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 IF; 
END LOOP; 
UTL_FILE.fclose (t_output); 
END; 
+0

こんにちは、私はそれに写真を挿入し、コードと呼ばれる、BLOB列を持つ表を作成し、それは**、**ワークスので、多分あなたはどこかに問題がある(かもしれテーブル自体または挿入プロセスかもしれません) – hmmftg

+0

返信ありがとうございます。しかし、上記のコードを1つのレコードだけ呼び出すと、正常に動作しますが、テーブルに複数のレコードが含まれていて、それらのすべてを抽出する必要があります。 – Muzurl

+0

set ** t_position:= 0 **ループ内 – hmmftg

答えて

0

私はUTL_FILE.fclose(t_output)を移動することをお勧めします。 END IF前:

END LOOP; 
UTL_FILE.fclose (t_output); 
END IF; 
END LOOP; 
関連する問題