从 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”错误

当我尝试从 main 调用我的类模板函数时出现错误

查询 oracle 多维数据集时出现 java.sql.SqlRecoverableException

从 C 调用汇编函数时出现分段错误错误

从 Angular Js(Java Web)调用 API 时出现 CORS 错误

尝试从外部模态视图控制器调用视图控制器函数时出现致命错误