诡异的数据库存储过程调用问题

发布于 2021-11-21 08:43:42 字数 2040 浏览 868 评论 6

我们现在用的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

永不分离 2021-11-23 19:30:14

其实程序最后跑下来 是调用的没有参数的存储过程的。而数据库的存储过程确实也没有参数。

凌乱心跳 2021-11-23 19:27:55

调试吧 保证是那里错 你在这文没含义

残花月 2021-11-23 19:25:02

BadSqlGrammarException 明明是参数错误 自己检查下 或者把query日志看看 一定能找到原因

秉烛思 2021-11-23 11:17:50

但是也有成功的。而且调用的是存储过程撒

等风来 2021-11-23 09:58:22

目测肯定是code的错误

只为守护你 2021-11-21 15:26:37

程序错误 把执行语句好好看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文