最近参与的项目,后台技术体系采用Spring Boot + Mybatis的组合,XXXMapper.xml中做批量插入时,偶然会遇到一些报错,如下:
报错日志:
(select ?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?, ?,?,?,?,to_number(?),?,?,?, ?,to_date(?, 'yyyy-MM-dd HH24:mi:ss'),to_date(?, 'yyyy-MM-dd HH24:mi:ss'), to_date(?, 'yyyy-MM-dd HH24:mi:ss'),to_date(?, 'yyyy-MM-dd HH24:mi:ss'),?,?,?, ?,?,?,to_date(?, 'yyyy-MM-dd HH24:mi:ss'),?,to_date(?, 'yyyy-MM-dd HH24:mi:ss'),?,?, ?,?,?,?,?,?,to_number(?),to_number(?), to_number(?),to_number(?),to_number(?),to_number(?),to_number(?),?,?,?, ?,? from dual)
### Cause: java.sql.SQLDataException: ORA-01830: 日期格式图片在转换整个输入字符串之前结束
; SQL []; ORA-01830: 日期格式图片在转换整个输入字符串之前结束
; nested exception is java.sql.SQLDataException: ORA-01830: 日期格式图片在转换整个输入字符串之前结束
解决方案:
查看插入表相关字段的类型后得知为TIMESTAMP(6),故只需要将to_date函数改为to_timestamp函数,且格式需要按照数据库创建列的标准来指定格式,该处为精确到微秒6位即:to_timestamp(#{item.createDate,jdbcType=VARCHAR}, 'yyyy-MM-dd HH24:mi:ss:ff6')