2013-11-26 63 views
1

我有幾千個文檔在Oracle 10g數據庫中作爲斑點存儲。它們是.doc和pdf的混合體。我希望將它們從Oracle中提取到服務器上以遷移到其他位置。從Oracle中提取斑點 - 文件損壞

下面是我用來提取單個PDF的示例代碼。這似乎工作成功,直到我嘗試使用Adobe Reader打開文件。我收到一條消息:「打開此文檔時出錯,文件已損壞,無法修復。」

我已經能夠使用系統前端導出此PDF併成功讀取,因此該文件在Oracle上沒有損壞。

有其他人遇到過這個問題嗎?非常感謝。

DECLARE 

    l_buffer RAW(32767); --set buffer to maximum size 
    l_file  UTL_FILE.FILE_TYPE; 
    l_amount BINARY_INTEGER := 32767; --set amount to maximum size 
    l_pos  NUMBER := 1; 
    l_blob  BLOB; 
    l_blob_len NUMBER; 

BEGIN 

    select ff.blob_content 
    into l_blob 
    from documents pd 
    where 
     pd.id = '47820'; 

    l_blob_len := DBMS_LOB.getlength(l_blob); --acquire blob size 

    -- Open the destination file. 
    l_file := UTL_FILE.fopen('TEMP_DIR','test2511013','wb');   

    DBMS_LOB.read(l_blob, l_amount, l_pos, l_buffer);  

    UTL_FILE.put_raw(l_file, l_buffer, TRUE); 

    -- Close the file. 
    UTL_FILE.fclose(l_file); 

END; 

回答

1

您似乎只寫了LOB的第一個32767字節。你確定實際的LOB長度是否在這個限制內?此外,如果在請求讀取32767字節時LOB長度低於32767,會發生什麼情況?

+0

一個很好的問題!我的示例文件長度爲125899字節,這說明文件損壞。謝謝 - 我現在最好進一步調查。 – DavidG