我在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;
答案 0 :(得分:1)
您似乎只写了LOB的前32767个字节。您确定实际的LOB长度是否在该限制范围内?另外,如果在请求读取32767字节时LOB长度低于32767会发生什么?