在一次开发项目中,遇到求大于等于x.x%数据,在页面传递的x.x是String类型,在sql语句中接收x.x后返回的数据不符合要求。把语句copy到PL/SQL执行后返回的数据是正确的,代码执行后返回的数据就是不对。。。。。
经排查后发现x.x是String类型,mybatis-plus处理语句后查询语句变成select * from table where num>'x.x',而我们在PL/SQL执行的时候是select * from table where num>x.x,注意下两者区别,前者多了''.大意了,排查后把语句改成select * from table where num>to_number('x.x')返回结果正确。
这种小错误可能对刚入门的小伙伴来说有点奇葩,语句能正常执行,但结果就是不对。可能也有点莫名其妙,这跟oracle处理机制有关,表中列类型为number,传入为String类型执行语句也不会报错,只是结果可能不是自己想要的,尤其接收参数列为计算临时列可能结果更不准,这时就要把String类型的参数转换为number类型了。
如:select b.c from (select a.a/a.b as c from (select a,b from table a)) b where b.c >= '5.5'
这种返回结果肯定是不对的,此时就要注意将'5.5'转换为5.5,语句修改为select b.c from (select a.a/a.b as c from (select a,b from table a)) b where b.c >= to_number('5.5'),返回结果正确。
如果不正确之处,欢迎看的老铁指出。。。。