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的时候出错???????

解决方案 »

  1.   

    可能跟字段类型有关,把install_addr2类型定义发出来看看,length()返回以字符为单位的长度
      

  2.   


    isntall_addr2  varchar2(40)
      

  3.   

    公司上不了Q呢。我也觉得很奇怪,怎么老是报错,难道AND Length(Nvl(address2,' '))<=40
    失效了么?另外,不加NVL是可以update的。但是address1或address2或address3或address4为null的话就update不了了。