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类型

同时注意转换类型后的效率问题

posted @ 2023-11-24 11:00  gz狗柱  阅读(188)  评论(0)    收藏  举报