繁体   English   中英

从 Java 调用 Oracle Function 时出现错误 ORA-00900

[英]Error ORA-00900 while calling a Oracle Function from Java

我在尝试从代码中调用 Oracle function 时收到ORA-00900错误,而它在 sqldeveloper 中有效。 我试图从中调用 Oracle function 的代码如下。

        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: invalid SQL 语句

根据JavaDoc

该接口用于执行SQL存储过程。 JDBC API 提供了存储过程 SQL 转义语法,允许以标准方式为所有 RDBMS 调用存储过程。 这种转义语法有一种形式包含结果参数,另一种形式不包含。 如果使用,结果参数必须注册为 OUT 参数。 其他参数可用于输入,output 或两者兼而有之。 参数按编号顺序引用,第一个参数为 1。

{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}

{call <procedure-name>[(<arg1>,<arg2>, ...)]}

看起来{?=之间不应该有空格,而你有空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM