从Java调用Oracle函数时出现错误ORA-00900
在尝试从代码中调用Oracle函数时,我遇到了ORA-00900错误,而它可以从sqldeveloper中工作。 下面是我试图调用Oracle函数的代码从Java调用Oracle函数时出现错误ORA-00900,java,spring,oracle,spring-boot,Java,Spring,Oracle,Spring Boot,在尝试从代码中调用Oracle函数时,我遇到了ORA-00900错误,而它可以从sqldeveloper中工作。 下面是我试图调用Oracle函数的代码 passwordCriteria = session.doReturningWork(connection -> { try (CallableStatement function = connection .prepareCall("{ ? = call t
passwordCriteria = session.doReturningWork(connection -> {
try (CallableStatement function = connection
.prepareCall("{ ? = call test$ui_mob.password_change (?,?,?,?) }")) {
function.setEscapeProcessing(false);
function.registerOutParameter("p_response", Types.VARCHAR);
function.setString("p_username", "TEST_USER");
function.setString("p_companycode", "BSH");
function.setString("p_deviceid", "123456798");
function.setString("p_language", "en");
function.executeQuery();
return function.getString(1);
}
});
}
堆栈跟踪是
原因:java.sql.SQLSyntaxErrorException:ORA-00900:无效的sql
声明
根据:
用于执行SQL存储过程的接口。JDBCAPI提供了一种存储过程SQL转义语法,允许以标准方式为所有RDBMS调用存储过程。此转义语法有一个包含结果参数的表单和一个不包含结果参数的表单。如果使用,结果参数必须注册为输出参数。其他参数可用于输入、输出或两者。参数按编号顺序引用,第一个参数为1
{?=call[(,,…])}
{call[(,,…])}
看起来
{?=
之间应该没有空格,而您有空格。您能更改所有者名称吗?$char可能是问题所在