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的字段在没经过我允许又不通知我的情况下,隐含转换成数字呢?
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的字段在没经过我允许又不通知我的情况下,隐含转换成数字呢?
t1 set col2='3'|| col2 where col1='2'
还有你说的oracle 转换其实是 oracle 中一种隐式转换 比如 char 和varchar oracle 就能自动转换 .当然建议用显式转换是个好习惯
而ORACLE字符串相加必须用他独创的||,sql语言真的应该强制规范,ORACLE总是只作聪明,这样很不利于开发。
我就是同时使用MSSQL和ORACLE的,但因为MSSQL和ORACLE的实用性、方便性上,我是能不用ORACLE就不用,尽量用MSSQL,所以对ORACLE恶心的不通用的独创东西,很容易忘记。