Oracle 隐式数据类型转换的坑
在执行sql时 遇到了一个转换类型的错误 ORA-01722: invalid number
... LEFT JOIN A ON B.BUSINESSID = A.ID ...
原因是在进行隐式数据类型转换时,BUSINESSID 字段是 VARCHAR2类型,其中有些业务数据包含了非数字字符,导致转换报错
可以使用下面的sql查哪些数据的字段包含了非数字
select * from B where not regexp_like (BUSINESSID, '^(+|[0-9]+)$')
解决过程中查找的一些文章
ORACLE隐式类型转换 - 潇湘隐者 - 博客园 (cnblogs.com)
oracle隐式转换的规则_oracle隐式转换规则-CSDN博客
最终的解决办法转换类型后在进行比较运算 TO_CHAR(A.ID) 并建立索引
但是如果把条件换位置,就不会报错了,
ON A.ID = B.BUSINESSID
有待深入研究....
同理 ORDER BY 排序 也要转换为 NUMBER类型
同时注意转换类型后的效率问题

浙公网安备 33010602011771号