度量快速开发平台中的数据操作,可能存在这样的问题:
ora-01461:仅能绑定要插入long列的long值。
造成这样的原因,主要是表中有clob字段,平台中的类型被修改成字符;或者是字符上本身长度不够引起。
下面是一个示例演示效果:
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进行
|