从 Java 调用 Oracle 函数时出现错误 ORA-00900
Posted
技术标签:
【中文标题】从 Java 调用 Oracle 函数时出现错误 ORA-00900【英文标题】:Error ORA-00900 while calling a Oracle Function from Java 【发布时间】:2019-10-15 13:33:55 【问题描述】:我在尝试从代码中调用 Oracle 函数时遇到 ORA-00900 错误,而它在 sqldeveloper 中工作。 我试图从中调用 Oracle 函数的代码如下。
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 声明
【问题讨论】:
可以更改所有者名称吗? $ char 可能是问题 【参考方案1】:根据the JavaDoc:
用于执行 SQL 存储过程的接口。 JDBC API 提供存储过程 SQL 转义语法,允许以标准方式为所有 RDBMS 调用存储过程。这种转义语法有一种形式包含结果参数,另一种形式不包含。如果使用,结果参数必须注册为 OUT 参数。其他参数可用于输入、输出或两者。参数按编号顺序引用,第一个参数为 1。
?= call <procedure-name>[(<arg1>,<arg2>, ...)]
call <procedure-name>[(<arg1>,<arg2>, ...)]
看起来?=
之间不应该有空格,而你有空格。
【讨论】:
以上是关于从 Java 调用 Oracle 函数时出现错误 ORA-00900的主要内容,如果未能解决你的问题,请参考以下文章
从终端运行时出现“java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver”错误
查询 oracle 多维数据集时出现 java.sql.SqlRecoverableException