ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORA-01461解决过程

ORA-01461解决过程

原创 Linux操作系统 作者:hky87 时间:2010-11-05 11:12:30 0 删除 编辑
Normal 0 0 2 false false false EN-US ZH-TW X-NONE今日数据库报ORA-01461错误,在网上搜索了下了解了错误原因,并记录下测试示例:

create table test (a varchar2(1));

declare

v_a varchar2(5000):=lpad('a',5000,'a');

begin

insert into test values(substr(v_a,1,1));

end;

ORA-01461: can bind a LONG value only for insert into a LONG column

ORA-06512: at line 4

 

而如果这样写就对了

declare

v_a varchar2(5000):=lpad('a',5000,'a');

v_b varchar2(1):=substr(v_a,1,1);

begin

insert into test values(v_b);

end;

 

说明问题出在执行substr的时候,再改下

declare

v_a varchar2(4000):=lpad('a',4000,'a');

begin

insert into test values(substr(v_a,1,1));

end;

可以成功执行。

 

总结:在PL/SQL中varchar2最大可支持32767字节;在SQL中varchar2最大可支持4000字节,insert时如果声明的变量长度超过了sql中类型长度,就会触发ORA-01461错误,所以在插入之前截断字符到符合要求的长度即可。从以上例子可看出,必需在插入之前对字符串进行截取,不能在插入时才对字符进行截取。

这应该是由于pl/sql引擎在编译时对变量长度的判断先于substr进行..

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10314474/viewspace-677557/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-10-09

  • 博文量
    87
  • 访问量
    345410