Stored procedures 对存储过程的JDBC调用返回null

Stored procedures 对存储过程的JDBC调用返回null,stored-procedures,jdbc,ora-00911,callable-statement,Stored Procedures,Jdbc,Ora 00911,Callable Statement,我对Oracle数据库上的存储过程有一些问题 我只想调用一个过程(有50个IN参数和2个IN-OUT参数)并得到这2个OUT参数 我试图执行()关联的CallableStatement,但它返回一个NullPointerException java.lang.NullPointerException at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:977) at oracle.jdbc.driver.T4CCallableState

我对Oracle数据库上的存储过程有一些问题

我只想调用一个过程(有50个IN参数和2个IN-OUT参数)并得到这2个OUT参数

我试图执行()关联的CallableStatement,但它返回一个NullPointerException

java.lang.NullPointerException
at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:977)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1363)
...
下面是代码(我正在使用Hibernate):

如果在execute()之前

    call.setEscapeProcessing(false);
我有一个SQLSyntaxErrorException(ORA-00911:无效字符)

你能帮我吗

晶圆厂


解决方案如下:

程序的最后两个参数为输入输出。 我认为我们必须将它们作为外部参数进行管理:

CallableStatement call = connection.prepareCall("{?, ? = call bksgnvcrm.createorreturnproduct1nc(..., ?, ?)}");
但是,当这些参数输入输出时,必须将其声明为输入:

CallableStatement call = connection.prepareCall("{call bksgnvcrm.createorreturnproduct1nc(..., ?, ?)}");
最后将其注册为如下所示:

call.registerOutParameter(i, Types.INTEGER);
call.setInt(i++, errcode);
call.registerOutParameter(i, Types.VARCHAR);
call.setString(i++, errmsg);

我希望这能帮助你:)

我也有同样的问题。在我的例子中,我意识到调用存储过程时忘记了“call”这个词

"{ call myPackage.myProcedure(?,?,?,?) }"

这可能有一天会帮助其他人,谁知道…

{?,?=调用bksgnvcrm-这是什么?一个函数调用不能返回两个结果。
"{ call myPackage.myProcedure(?,?,?,?) }"