2013-11-26 31 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