本帖最后由 dan 于 2020-4-6 21:49 编辑
Oracle中对不同类型的处理具有显式类型转换(Explicit)和自动类型转换(隐式类型转换Implicit)两种方式,对于显式类型转换,我们是可控的,但是对于自动类型转换,当然不建议使用,因为很难控制,有不少缺点,但是我们很难避免碰到自动类型转换,如果不了解自动类型转换的规则,那么往往会改变我们SQL的执行计划,从而可能导致效率降低或其它问题,所以,Oracle开发人员很有必要了解Oracle自动类型转换的相关规则,从而避免自动类型转换导致相关问题的产生。 首先会对Oracle自动类型转换的规则做阐述,然后结合相关实例分析自动类型转换可能造成的问题。 自动类型转换规则: 一般一个表达式不能包含多种数据类型 select 5*10+'dan' from dual; 会报错,系统认为这是算式,所有参加的元素,如果不是数字就,隐式类型转换为数字,转换'dan'为数字时失败。 select 5*10+'2' from dual; 执行成功,结果为:52
隐式类型转换的确可以让我们少写一些内容,比如可以少写个to_char函数之类的东西,但是能不能运行正确就要依赖于具体的上下文了
注意: 1、如果有1个表里有个字符型字段,在查询语句里有个where子句里对该字段等于1个数字进行筛选,除非字段全为数字,否则就会出错。 2、如果涉及日期,比如,to_date(sysdate,fmt),如果当前session的日期格式与fmt设置的不一致,这个语句就会出错。
显式类型转换好处: 1、使用显示类型转换会让我们的SQL更加容易被理解,也就是可读性更强 2、自动类型转换的算法或规则,以后Oracle可能改变,这是很危险的,意味着旧的代码很可能在新的Oracle版本中运行出现问题。 主要就是to_char,to_date,to_number,to_clob这些函数, 注意:在写SQL的时候尽量不要对左值进行显式类型转换,否则对能用索引的用不上索引。 |