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进行
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) | Powered by Discuz! X3.2 |