【问题】用PL/SQL更改数据,表中的字段为varchar2(4000),修改表中的一个数据时直接用for update 做数据更改,数据的长度为2000多,但是在提交时报ORA-01480:trailing null missing from STR bind value错误
【分析】
大概有两种原因,一:pl/sql工具导致的,因为toad没有出现这个问题。二:OCI里面包含的变量长度问题,出现这个错误,说明字符串被中间截断了,不能正确的解析,
操作方法:
create table test
(name varchar2(4000))
select * from test for update插入下面数据是可以的
中国企业报股份有限公司旗下核心媒体《中国企业报》是中国唯一以企业和企业家为报道核心的中央级报纸。由中国企业联合会、中国企业家协会主管,国内外公开发行,同时赠阅全国人大、全国政协、中央国家机关、国资委系统以及世界企业500强、中国企业500强和中企联会员单位。《中国企业报》是一张专为中国企业创办的报纸。1988年1月4日,由国家经委主办,中国企业管理协会承办的《中国企业报》正式创刊。陈云同志为报纸题写了报头,邓力群任报社名誉顾问,袁宝华任报社名誉社长。从1988年开办至今,秉承“面向企业、为企业服务”的宗旨,《中国企业报》亲历并记录着中国企业的改革进程,同时伴随着中国企业的发展壮大,自己也在不断成长。2010年底,《中国企业报》响应国家文化体制改革要求,在行业内率先进行了转企改制,组建成
查看数据的长度:
SQL> select lengthb(name) from test;
LENGTHB(NAME)
-------------
999
当插入再添加一个汉字时,就报错,说明PL/SQL工具中只能插入1000个字节。
使用insert into可以解决这个问题,如下:
insert into test values('中国企业报股份有限公司旗下核心媒体《中国企业报》是中国唯一以企业和企业家为报道核心的中央级报纸。由中国企业联合会、中国企业家协会主管,国内外公开发行,同时赠阅全国人大、全国政协、中央国家机关、国资委系统以及世界企业500强、中国企业500强和中企联会员单位。《中国企业报》是一张专为中国企业创办的报纸。1988年1月4日,由国家经委主办,中国企业管理协会承办的《中国企业报》正式创刊。陈云同志为报纸题写了报头,邓力群任报社名誉顾问,袁宝华任报社名誉社长。从1988年开办至今,秉承“面向企业、为企业服务”的宗旨,《中国企业报》亲历并记录着中国企业的改革进程,同时伴随着中国企业的发展壮大,自己也在不断成长。2010年底,《中国企业报》响应国家文化体制改革要求,在行业内率先进行了转企改制,组建成立《中国企业报》股份有限公司。');
commit;
总结:
1 PL/SQL工具使用for update插入数据时,只能插入1000个字节,否则会报错,是工具的问题
2 数据库中并没有问题