UPDATE bcn_cus_address_end SET
install_addr1=address1,
install_addr2=address2,
install_addr3=address3,
install_addr4=address4,
install_build_code=build_code,
install_addr_code=addr_code,
install_floor=Floor
WHERE
install_addr1 IS null
AND Length(Nvl(address1,' '))<=40
AND Length(Nvl(address2,' '))<=40
AND Length(Nvl(address3,' '))<=80
AND Length(Nvl(address4,' '))<=160
运行结果:
ORA-12899: value too large for column "INC"."BCN_CUS_ADDRESS_END"."INSTALL_ADDR2" (actual: 45, maximum: 40)
SELECT Length(address2) FROM bcn_cus_address_end WHERE Length(address2)>40
运行结果:
LENGTH(ADDRESS2)
57
41
44
50
57
43
请问,为何update的时候出错???????
------解决方案--------------------
可能跟字段类型有关,把install_addr2类型定义发出来看看,length()返回以字符为单位的长度
------解决方案--------------------
isntall_addr2 varchar2(40)
------解决方案--------------------
这么神奇的问题,可以加Q远程看看么
------解决方案--------------------
公司上不了Q呢。我也觉得很奇怪,怎么老是报错,难道
AND Length(Nvl(address2,' '))<=40
失效了么?
另外,不加NVL是可以update的。但是address1或address2或address3或address4为null的话就update不了了。
------解决方案--------------------
数据中有中文,所以我猜应该是中文在作怪。谢谢关注此贴的人!