我正在尝试开发一个过程,它将读取一个表的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;
答案 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.