从Oracle中提取blob - 文件已损坏

时间:2013-11-26 10:50:29

标签: oracle pdf plsql blob

我在Oracle 10g数据库中将几千个文档存储为blob。它们是.doc和pdf的混合物。我希望将它们从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 个答案:

答案 0 :(得分:1)

您似乎只写了LOB的前32767个字节。您确定实际的LOB长度是否在该限制范围内?另外,如果在请求读取32767字节时LOB长度低于32767会发生什么?