0

我正在尝试开发一个程序,该程序将读取表的 BLOB 字段并编写一个 RTF 文档,该文档将用作另一个程序的模板,但是当程序启动 select 语句时,我遇到了 ORA-06502 错误.

阅读文档后,此错误是由字段之间的不兼容引起的(数字或值错误字符串)

但是我在互联网上到处都看到了这个例子,而且我对导致它的原因一无所知。

我的程序的源代码如下:

PROCEDURE p_transfer_db_client(pcPath IN VARCHAR2,
                               pnSequence IN NUMBER) IS

   v_src_blob BLOB;
   v_file UTL_FILE.FILE_TYPE;
   v_offset INTEGER := 1;
   v_amount BINARY_INTEGER := 32766;
   v_binary_buffer RAW(32767);

BEGIN

   SELECT model 
     INTO v_src_blob
     FROM models
    wHERE id = pnSequence;

   v_file := UTL_FILE.FOPEN(pcPath, 'model.rtf', 'wb', v_amount); 

   LOOP
      BEGIN
          DBMS_LOB.READ(v_src_blob, v_amount, v_offset, v_binary_buffer);
          UTL_FILE.PUT_RAW(v_file, v_binary_buffer);
          v_offset := v_offset + v_amount;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
               EXIT;
      END;
   END LOOP;

   UTL_FILE.FFLUSH(v_file);
   UTL_FILE.FCLOSE(v_file);

END p_transfer_db_client;
4

1 回答 1

0

编辑:我没有看到您将此问题标记为forms.

您的代码在表单中不起作用:UTL_FILE 和 DBMS_LOB 在 DB 服务器上运行,而不是在表单客户端上运行,因此它们应该在 PL/SQL 过程中,而不是在 Forms 过程中。

我很确定 BLOB 数据类型不是像这样在表单中管理的,事实上我很惊讶它甚至可以编译!

看一下这个例子,它展示了如何处理表单中的 blob,你会发现你需要在 PLSQL 过程中定义和查询 blob,而不是直接通过表单。

我建议您在 DB 中将过程创建为 PLSQL 包,并从您的表单客户端调用此包。


还有其他事情发生,我不明白为什么 SELECT 语句不起作用。

如果您注释掉所有变量声明和所有以下语句,您是否仍然会收到错误消息,即:

SQL> create table models (
  2     inst_num_instituicao NUMBER(2) not null,
  3     id                   NUMBER(3) not null,
  4     model                BLOB not null);

Table created.

SQL> insert into models values (1, 1, hextoraw('FFFF'));

1 row created.

SQL> declare
  2     b blob;
  3  begin
  4     select model into b from models where id = 1;
  5  end;
  6  /

PL/SQL procedure successfully completed.
于 2012-10-29T15:39:48.077 回答