Java SQL语法中的串联变量

Java SQL语法中的串联变量,java,oracle,jdbc,spring-jdbc,Java,Oracle,Jdbc,Spring Jdbc,我有以下资料: public void getProceduredName(long fileId, String proceduredName ){ final String sql = "call " + proceduredName + " (:fileId)"; SqlParameterSource namedParameters = new MapSqlParameterSource("fileId", fileId); try { nam

我有以下资料:

public void getProceduredName(long fileId, String proceduredName ){

    final String sql = "call " + proceduredName + " (:fileId)";

    SqlParameterSource namedParameters = new MapSqlParameterSource("fileId", fileId);

    try {
        namedParameterJdbcTemplate.update(sql, namedParameters);
    } catch (Exception e){
        ...     
      }
}
因此,一旦它读取该行并尝试在namedParameterJdbcTemplate上使用它,它就会说:
糟糕的SQL语法[call procedureName(?);嵌套异常为java.sql.SQLException:ORA-06576:不是有效的函数或过程名称

现在。。。如果我这样说:
final String sql=“call hardCodedName(12345)”
然后它工作了

如何修复它,以便传入变量和参数

我在这里看了看:这并不能解决问题

工作原理:
final String sql=“callproceduredname(:fileId)”

我想做的是:
final String sql=“call”+proceduredName+”(:fileId)”

我感觉当在Tring的中间传递变量时,它停止将字符串作为SQL语法,因此只接受语法:<代码>,调用“和<代码>”(:FILID)< <代码> < /P> 如何使用变量串联使其工作

谢谢

编辑: 我这样调用getProceduredName:
Dao.getProceduredName(fileId,proceduredName)

其中dao是接口,daoImp将实际实现getProceduredName()。我在这里传递的是id类型Long,过程类型字符串的名称

我的问题的语法实际上是正确的,我在过程前面遗漏了重命名DB的名称,所以它是这样的:


final String sql=“call sqlName.+proceduredName+”(:fileId)”

此处显示的串联应与硬编码函数名相同。你能更详细地介绍一下如何调用
abc()
?我在文章的底部添加了它,上面写着编辑并重命名
abc()
getProceduredName()
你从System.out.println(sql)中得到了什么?“我猜这不是你想的,”约翰说now@John实际上,我在这两种情况下都放了两个print语句,我在procedureName前面缺少了数据库名称。感谢大家帮助我调试它,我无法告诉你们有多少人会因为Oracle上的gotcha而绊倒。如果在将连接分发给工作进程之前您有权访问这些连接,则可以通过编程方式发出
ALTER SESSION SET CURRENT SCHEMA=YOURSCHEMANAME