oracle中数值类型问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 14:50:03
很奇怪,在oracle中我定义了成绩字段CJ,是varchar2类型,当我在pl/sql里写CJ=CJ+1,CJ字段上的数据会自动加上1,,当据CJ字段排序时,无论升序降序都可以安分数高低排,,,可是CJ字段是字符型,在没有经过类型转换的情况下怎么会知道自动加1,怎么知道排序,,应该是数值类型才能做到啊,,,如里字符也能做到数值计算,那什么时候用到数值类型呢??????,,
请前辈赐教

Oracle 中数据类型存在有隐式转换的概念.
当你 CJ=CJ+1 的时候, 因为 + 号只能是属于两个数值相加, 所以 Oracle 就隐式的将 CJ 转换成数值后再和 1 相加, 之后要赋值给 CJ 字符串字段的时候, 又会把 计算出的数值转换成字符串写入到该字段中.

另外字符串也是可以排序的, 排序并不是只有数字才有的专利.

select * from table1 where table1.column1 = 123;
select * from table1 where table1.column1 = '123'
其中table1的column1是数值类型,但是这两条语句的
查询结果是一样的。
但是执行的效果就不一样。。要是在column1上建立索引,第二条语句用不到索引,因为oracle会自动进行隐式类型转换
select * from table1 where to_char(table1.column1) = '123'

应该是编码问题