诡异的数据库存储过程调用问题
我们现在用的job平台
定时调用后端的执行存储过程的代码。
代码是Spring的jdbcTemplate写的
最后只是拼成 call function_name() 这样的sql并执行。
但是时好时坏的
失败的话会报:
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [call CP_PLC_ACC()]; nested exception is java.sql.SQLException: ORA-06576: not a valid function or procedure name.
但是检查数据库端 发现这个存储过程是有且有权限调用的。而且上面还成功过两次。
Java端方法定义如下:
/** * 执行存储过程 (无返回值的) * @param dbname 数据源名字 * @param spname 存储过程名字 * @param params 传入存储过程参数(null为没有传入参数) * @return 执行影响的行数,-1为失败 */ @Override public String Execute(String dbname, String spname, Object[] params) { int iReturn=-1; try{ if(null==jdbcTemplate){ log.warn("jdbcTemplate is null"); } if(null==spname||0==spname.trim().length()){ log.warn("vSpname is null"); return null; } if(null!=dbname && dbname.trim().length()>0){ log.info("dsName="+dbname); this.jdbcTemplate=(JdbcTemplate)AppUtil.getBean(dbname); } String strSQL="call "+spname+"("; if(null!=params && params.length>0){ for(int i=0;i<params.length;i++){ if(0==i) strSQL=strSQL+"?"; else strSQL=strSQL+",?"; } } strSQL=strSQL+")"; if(null!=params && params.length>0){ log.debug("执行带参数的存储过程:"+dbname+spname+" info:"+Log4jUtil.getInfo(strSQL, params)); iReturn=this.jdbcTemplate.update(strSQL, params); }else{ log.debug("执行不带参数的存储过程:"+dbname+spname+" info:"+strSQL); iReturn=this.jdbcTemplate.update(strSQL); } log.info("iReturn="+iReturn); log.info("strSQL="+strSQL); // log.info("params="+params[0].toString()); }catch(Exception ex){ log.error("",ex); throw new ApplicationException(ex.getMessage()); } return ""+iReturn; }
求大神解答 为什么会报这个异常
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
其实程序最后跑下来 是调用的没有参数的存储过程的。而数据库的存储过程确实也没有参数。
调试吧 保证是那里错 你在这文没含义
BadSqlGrammarException 明明是参数错误 自己检查下 或者把query日志看看 一定能找到原因
但是也有成功的。而且调用的是存储过程撒
目测肯定是code的错误
程序错误 把执行语句好好看