BLOB检索中的错误ORA-06502

时间:2012-10-29 14:02:37

标签: sql oracle blob oracleforms

我正在尝试开发一个过程,它将读取一个表的BLOB字段并编写一个RTF文档,该文档将用作另一个过程的模板但是当该过程激活选择状态时,我遇到了一个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;

1 个答案:

答案 0 :(得分:0)

修改:我没有看到您将此问题标记为forms

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

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

例如,看一下这个example showing how to handle blobs inside forms,您将看到需要在PLSQL过程中定义和查询blob,而不是直接通过表单。

我建议你在数据库中创建一个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.