Oracle 更新BLOB列ORA-01461:只能为插入到长列中绑定长值

Oracle 更新BLOB列ORA-01461:只能为插入到长列中绑定长值,oracle,Oracle,我想在BLOB列中存储一个过程,不幸的是,我无法向您展示代码,但它包含126行。这是我正在使用的更新 DECLARE str varchar2(20000); BEGIN str :='create or replace A_LONG_PROCEDURE procedure .........'; UPDATE tab1 SET report=str WHERE reference= 'TER'; commit; end; / 我得到错误ORA-01461;只能为插入到长列中绑定长

我想在BLOB列中存储一个过程,不幸的是,我无法向您展示代码,但它包含126行。这是我正在使用的更新

DECLARE   str varchar2(20000);
BEGIN   str :='create or replace A_LONG_PROCEDURE  procedure .........';
UPDATE tab1 SET  report=str
WHERE reference= 'TER';
commit;
end;
/
我得到错误
ORA-01461;只能为插入到长列中绑定长值

我尝试使用更新
set='CREATE OR REPLACE LONG_PROCEDURE…'
我得到了错误01704 string literal to LONG


如何将长过程更新为blob列?

您需要将列类型更改为
CLOB
或将
CLOB
变量初始化为过程文本,然后在插入之前使用过程将其转换为
blob

Oracle 11g的示例:

表格设置:

create table lob_sample(
  id         number,
  clob_field clob,
  blob_field blob
);

insert into lob_sample(id) values(1);
代码:


这应该起作用,考虑将列变为CULB。< /P>

DECLARE   
  declare str tab1.report%type;
BEGIN   
  str:= to_blob(utl_raw.cast_to_raw('create or replace     A_LONG_PROCEDURE...'));

  UPDATE tab1 SET  report=str
  WHERE reference= 'TER';

  commit;
end;
/

只是检查一下,我的答案是清楚的还是需要更多的解释?试试
declare str tab1.report%type
@FrankOckenfuss我得到一个错误的表达式类型,报告的列类型是blob
str:=to_blob('383838')参见文档至
至_blob
,输入为
raw
类型。为什么使用blob而不是clob数据类型?@Frankockenfoss它不起作用,我是这样做的
str:=to_blob(rawtohex('
),我得到了错误ora-06502数字或值错误:十六进制到原始转换错误你是说将str转换为clob?…你能举个例子吗
DECLARE   
  declare str tab1.report%type;
BEGIN   
  str:= to_blob(utl_raw.cast_to_raw('create or replace     A_LONG_PROCEDURE...'));

  UPDATE tab1 SET  report=str
  WHERE reference= 'TER';

  commit;
end;
/