2012-10-29 77 views
0

我试图开发一种将读取表的BLOB字段或写入将被用作模板到另一个程序,但RTF文档的程序时,程序会启动这个选择statemente ,我遇到了一个ORA-06502错误。错误ORA-06502的BLOB检索

此错误,阅读文档后,被田野之间的不兼容性(数字或值错误字符串)

造成的,但我已经在互联网上随处可见这个例子,我跑出来的有什么想法正在造成它。

我的程序的源代码如下:

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

你能后的表的定义'models':

,如果你注释掉所有变量声明和下面的所有语句,即你仍然得到错误?特别是,你的'id'列是VARCHAR2吗? –

+0

创建表款 ( inst_num_instituicao NUMBER(2)不为空, ID号(3)不为空, 模型BLOB NOT NULL ) – lagranzotto

+1

的'ORA-06502'意味着你正在尝试设置变量值比其最大值(例如,将VARCHAR2(2)设置为'XXX')。哪一行确切地触发了错误?在SELECT语句 –

回答

0

编辑:我没有看到你有标记这个问题为forms

您的代码将不会在里面工作形式:UTL_FILE和DBMS_LOB运行数据库服务器上,而不是形式的客户端,以便他们应该是一个PL/SQL程序,而不是一个表单程序英寸

我敢肯定的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. 
+0

此过程在Oracle Forms 6i Form中使用...在PL/SQL Developer中我没有得到任何错误 – lagranzotto

+0

在数据库服务器上运行'UTL_FILE'和'DBMS_LOB',而不是表单客户端,所以它们应该在一个PL/SQL过程,而不是一个Forms过程。我很确定BLOB数据类型不是在窗体中像这样管理的。看一看[这个例子](http://fdegrelle.over-blog.com/article-2615079.html),你会发现你需要在PLSQL过程中定义和查询blob,而不是直接通过表格。 –

+0

我已经达到了另一个解决这个问题,修改我如何获取模板文件,现在直接从服务器上的文件服务器做的事情。但感谢所有的帮助:) – lagranzotto