create table t1 (col1 varchar2(6), col2 varchar(6) );
insert into t1 values ('1','123'); 
insert into t1 values ('2','1:3'); 建立以上表,执行下面的语句会报ORA-01722错误。原因是ORACLE自作聪明猪头般的把字段中的值隐含的转换成数字了。
update t1 set col2='3'+col2注意:
update t1 set col2='3'+col2 where col1='1'
修改第一条记录时不报错,update t1 set col2='3'+col2 where col1='2'
修改第二条记录时报错,因为隐含的转换成数字,可‘:’字符不能转换。
如何能让ORACLE的猪头不自做主张、弄巧成拙把VARCHAR2的字段在没经过我允许又不通知我的情况下,隐含转换成数字呢?

解决方案 »

  1.   

    如果你只是单纯的连接字符串的话,应该这么写
    t1 set col2='3'|| col2 where col1='2'
      

  2.   

    1:3  是数字吗?
    还有你说的oracle 转换其实是 oracle 中一种隐式转换  比如 char 和varchar  oracle 就能自动转换 .当然建议用显式转换是个好习惯
      

  3.   

    用惯了聪明的MSSQL,都是用+号来连接,MSSQL会自动判断是字符相加还是数字相加。
    而ORACLE字符串相加必须用他独创的||,sql语言真的应该强制规范,ORACLE总是只作聪明,这样很不利于开发。
    我就是同时使用MSSQL和ORACLE的,但因为MSSQL和ORACLE的实用性、方便性上,我是能不用ORACLE就不用,尽量用MSSQL,所以对ORACLE恶心的不通用的独创东西,很容易忘记。