今天在查找一个生产问题时,发现一个sql,查询字符串的字段,没有拼接单引号,有时会返回成功,有时会返回失败,理论上来说VARCHAR2类型字段查询时应该加单引号,但是也会返回成功就有点不寻常了, 因此仔细查看了下数据,发觉问题所在,因此记录一下,希望大家在以后不再采坑。
就随便拿一个现有的表看一下,表结构如下:
里边有数据如下:
查询数据不加单引号,直接报错ORA-01722:无效数字
我们改下sql,这次不加单引号,查询成功
由以上两次查询大致可以看出:当在查询的结果中都可以自动转化为数字的时候,不加单引号也能查询,但是当查询结果存在不能自动转化为数字的时候则会报错。
如第一次查询存在code为“1231a”无法自动转化为数字,因此报错,第二次先经过筛选,满足like '132%'条件的都能转化为数字就没问题。