【问题标题】:Extract BLOB data from Oracle Database and convert to original file从 Oracle 数据库中提取 BLOB 数据并转换为原始文件
【发布时间】:2013-08-21 02:12:52
【问题描述】:

我正在尝试提取BLOB 数据并将其转换为原始文件(pdf、rtf、doc 等)。以下是我的代码:

DECLARE
  l_file      UTL_FILE.FILE_TYPE;
  l_buffer    RAW(32767);
  l_amount    BINARY_INTEGER := 32767;
  l_pos       NUMBER := 1;
  l_blob      BLOB;
  l_blob_len  NUMBER;
BEGIN

  SELECT file_contents
    INTO   l_blob
    FROM   irb_files
   WHERE  FILE_NAME = 'STD_FlipBook_Religion2013.doc';

  l_blob_len := DBMS_LOB.getlength(l_blob);

  -- Open the destination file.
  l_file := UTL_FILE.fopen('IRB','STD_FlipBook_Religion2013.doc','wb','W');


  DBMS_LOB.read(l_blob, l_amount, l_pos, l_buffer);
  UTL_FILE.put_raw(l_file, l_buffer, TRUE);
  l_pos := l_pos + l_amount;

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

END;

我对这一切都比较陌生,所以如果我的代码有点不对劲,我很抱歉。我不断收到的错误是:

Error report:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 18
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    
*Action:

任何帮助将不胜感激。

数据库信息: Oracle9i 企业版 9.2.0.5.0 版

【问题讨论】:

  • 第 18 行是什么???请同时显示表架构。

标签: oracle plsql blob oracle9i


【解决方案1】:

问题出在这一行:

l_file := UTL_FILE.fopen('IRB','STD_FlipBook_Religion2013.doc','wb','W');

文档显示了下面函数的签名。您拥有的最后一个参数“W”对应于“max_linesize”,它应该是一个数字。因此,您不能将“W”转换为数字。我认为您可以在您的情况下简单地使用默认值,因此只需删除“W”参数即可。

(来自 Oracle 9.2 文档)

FOPEN 函数 这个函数打开一个文件。您可以指定最大行大小并最多同时打开 50 个文件。另见“FOPEN_NCHAR 函数”。

语法 UTL_FILE.FOPEN ( VARCHAR2 中的位置, VARCHAR2 中的文件名, VARCHAR2 中的 open_mode, max_linesize IN BINARY_INTEGER) 返回文件类型;

参数 表 95-3 FOPEN 功能参数 参数说明 地点 文件的目录位置。

文件名 文件名,包括扩展名(文件类型),不包括目录路径。在 Unix 中,文件名不能以 / 结尾。

open_mode 指定文件的打开方式。模式包括:

r--读取文本

w--写文字

a--追加文字

如果您尝试使用 open_mode 的值打开一个不存在的文件,则会以写入模式创建该文件。

max_linesize 此文件每行的最大字符数,包括换行符。 (最小值 1,最大值 32767)。默认值约为 1000 字节。

【讨论】:

  • 谢谢,你引导我写方向我需要删除'wb'并拥有'W',32767
  • 现在文件已创建但未正确导出,它只是二进制代码
  • 伙计,对于您发布的原始问题,我给了您一个完全有效的答案。现在,答案不再正确,因为您遇到了新问题??不酷。然后提出一个新问题。
  • 我的错误是取消选中它作为答案。都想通了。谢谢楼主
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多