最近做了一个改变数据库某一字段的值,这个值比之前输入的字数要多,开始的时候,直接在PL/SQL Developer中用常规的select ...for update 的方法修改,可是每次都几个字都会报错“ORA-01480: STR 绑定值的结尾 Null 字符缺失”,我以为是定义的字段长度不够长,不过看了下是varchar(3000),我修改后的远远达不到,看来不是这个问题.
后来在网上搜了下,总结了两种方法.(在此感谢那些无私奉献的人!!!)
首先确认你的修改后的字段值是否真的超过表字段定义长度,注意:中文占用字节长度的问题;根据字符集编码的不同,在oracle里有可能占2或者3个字节。
其次查看定义的字段长度,我的字段长度为vachar2(3000),貌似varchar2最长就是43000,好奇的可以去查查这方面的问题。
长度没有超过3000:既然没有超过3000字节那么问题就是oracle储存过程的bug了。在不同的情况下,有的就可以正常的用plsql操作表储存数据,有的就会报错01480。
既然你找到这里来了,那就是你遇到了第二种情况 plsql出现bug了。
解决办法1:将数据压缩,就是去掉多余的空格,要是2000字节多一点的情况下 就可以用这个办法解决。
解决办法2:用sql语句插入:编辑sql insert into tablename values (null,null,null,...);或者是 update 语句都可以将未超过4000字节的数据储存到表里去。
长度超过3000:
用压缩的办法去掉多余的空格,如果长度小于3000了,就可以用方法2 试一下。
压缩之后还是大于4000,就要注意要修改表的字段的类型了.
我的解决方法是第二种,update语句.