Oracle ORA-06861: 文字与格式字符串不匹配 记录两次无助的遭遇:存储过程直接执行正常,java调用存储过程则报错

一天之内,出现了两次这样的尴尬遭遇:将参数直接放到存储过程中执行时,程序运行正常,但是通过java程序去调用数据库存储过程时,就抛出异常。我和我的同事分别遇到了一次,但是,原因却大不相同。

先说说我的:)
通过前端点击按钮执行程序后,所报的错误居然不在存储过程内部,而是同一个包下,另一个验证程序所报验证失败错误。我反复检测了自己的java代码以及存储过程内部的代码,确定以及肯定自己没有去调用那个存储过程。最后发现,在公共方法中,居然将我所要处理的单据类型,提前调用了一次验证程序,所以程序还没执行到我自己的方法,其实就已经报错了。阿西吧,这种不能debug的开发方式,如果遇到bug,那是真滴。。。头大,部分代码如下:

if(sheet_type_id.equals("130")||sheet_type_id.equals("295")||sheet_type_id.equals("840")||sheet_type_id.equals("545")||sheet_type_id.equals("850")||sheet_type_id.equals("890")||sheet_type_id.equals("900")||sheet_type_id.equals("270")||sheet_type_id.equals("1040")){ 
//省略若干行
}

//省略若干行
//生产报工,完工入库或完工退库
if(sheet_type_id.equals("550")||"545".equals(sheet_type_id)){
				
  }

545的单据类型的处理方式是我写的,然后前面的代码是别人写的,所以也没多瞅,而错误也就是在这之前抛出的。

--------------------割-----------------------------------------
然后我同事遇到的问题更奇葩,也就是标题里的错误:ORA-06861: 文字与格式字符串不匹配
这个错误肯定是存储过程里面的错误,只有通过java代码调用存储过程的时候才会抛出来。但是,用plsql录入同样的参数调试了好几次居然什么异常都没有,百思不得其解!!?
在网上查询的ORA-06861的问题,大部分是由于TO_DATE函数相关的使用错误。然后我逐个检查存储过程中所有使用了TO_DATE的地方,还真有一个地方存在疑问,TO_DATE(?,‘YYYY-MM-DD HH24:MI:SS’),将问号处的传入参数的格式进行规范,然后测试,发现问题居然神奇的解决了。
现在想起这个问题,还是觉得非常诡异。但也提醒我们,在开发的时候,一定要注意规范。测试的时候没问题,不一定能经受住生产环境的压力。始终相信,觉得哪儿有问题但又说不出来个所以然的地方,肯定埋伏着bug。

发布了92 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41885819/article/details/102626844