我有一个要求,我必须处理程序的可选参数。我可以通过以下
成功执行它Invoking procedure defaults without binding values to parameters in Jdbc
当我将所有参数都设置为IN参数,即没有registerOutParameter时,它工作正常。如果我有OUT参数并处理它,它会给我如下错误。
我当前的代码
String getDBUSERCursorSql = "{call greetings (param_4 => ?,param_5 => ?, param_6 => ? , param_7 => ? )}";
Connection dbConnection = dataSource.getConnection();
callableStatement = dbConnection.prepareCall(getDBUSERCursorSql);
callableStatement.setString(1, "paramFoure");
callableStatement.setString(2,"paramSix");
callableStatement.setString(3,"paramSeven");
callableStatement.registerOutParameter(4, OracleTypes.CURSOR);
callableStatement.execute();
线程“main”中的异常java.sql.SQLException:ORA-20999:传递给过程的参数组合无效 ORA-06512:在“SYSTEM.GREETINGS”,第846行 ORA-06512:第1行
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1007)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)
at oracle.jdbc.driver.OracleCallableStatement.executeUpdate(OracleCallableStatement.java:4739)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)