昨日在处理 oracle 查询sql语句的时候,出现了ora-01847 错误,但奇葩的是,在 idea 中执行该 sql 语句,却不会出现 01847 这个错误,放到程序中运行时,就会出错,这就说明,在 sql 编写上不够严谨,故特意记下了这次解决问题的过程和思路,希望能帮到遇到同样问题的朋友们。
报错原 sql:
SELECT NVL(u.name,' ') name,u.sex,NVL(u.create_time,' ') create_time
FROM user u
WHERE u.create_time BETWEEN #{beginDate} AND #{endDate}
ORDER BY u.create_time DESC
报错原因在于在 create_time 上使用了nvl函数,create_time 为 date 类型,但是我在 nvl 中,给的却是默认字符,这就导致了 ora-01847 错误。最后解决办法是,将 create_time 转换成字符,保持 nvl 前后数据格式一致,报错就消失了。
解决问题后的 sql:
SELECT NVL(u.name,' ') name,u.sex,NVL(TO_CHAR(u.create_time,'yyyy-MM-dd HH24:mi:ss'),' ') create_time
FROM user u
WHERE u.create_time BETWEEN #{beginDate} AND #{endDate}
ORDER BY u.create_time DESC
如果此篇博文能帮到你,希望你能不吝点赞或评论下~
学无止境,生生不息。