记录一次oracle处理接收参数是String类型的数字

在开发中遇到一个问题,当SQL语句中的比较条件是String类型的百分比值时,直接使用可能导致结果错误。Oracle数据库在处理这类情况时,需要将String转换为Number类型,例如使用`to_number()`函数,否则结果可能不正确。MyBatis-Plus生成的SQL可能未做适当转换,因此需要手动修正,确保数据类型匹配以获取准确结果。
摘要由CSDN通过智能技术生成

        在一次开发项目中,遇到求大于等于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'),返回结果正确。

        如果不正确之处,欢迎看的老铁指出。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值