StoredProcedureQuery with OUT param fails with Oracle when using named parameters

Description

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Error calling CallableStatement.getMoreResults at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) at org.hibernate.jpa.internal.StoredProcedureQueryImpl.execute(StoredProcedureQueryImpl.java:224) at support.hibernate.entity.TestHibernate.test(TestHibernate.java:76) ... Caused by: org.hibernate.exception.GenericJDBCException: Error calling CallableStatement.getMoreResults at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) at org.hibernate.result.internal.OutputsImpl.convert(OutputsImpl.java:79) at org.hibernate.result.internal.OutputsImpl.<init>(OutputsImpl.java:56) at org.hibernate.procedure.internal.ProcedureOutputsImpl.<init>(ProcedureOutputsImpl.java:32) at org.hibernate.procedure.internal.ProcedureCallImpl.buildOutputs(ProcedureCallImpl.java:411) at org.hibernate.procedure.internal.ProcedureCallImpl.getOutputs(ProcedureCallImpl.java:363) at org.hibernate.jpa.internal.StoredProcedureQueryImpl.outputs(StoredProcedureQueryImpl.java:234) at org.hibernate.jpa.internal.StoredProcedureQueryImpl.execute(StoredProcedureQueryImpl.java:217) ... 32 more Caused by: java.sql.SQLException: The number of parameter names does not match the number of registered praremeters at oracle.jdbc.driver.OracleSql.setNamedParameters(OracleSql.java:199) at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4753) at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1378) at org.hibernate.result.internal.OutputsImpl.<init>(OutputsImpl.java:52) ...

Have also seen a variant exception (from Oracle code):

java.sql.SQLException: operation not allowed: Ordinal binding and Named binding cannot be combined!

Simple stored procedure with a single input and single output parameter:

create or replace PROCEDURE TEST_PROC(param1 CHAR, retval OUT INTEGER) AS BEGIN retval:=1; END TEST_PROC;

1 2 3 4 5 final StoredProcedureQuery query = entityManager.createStoredProcedureQuery("TEST_PROC"); query.registerStoredProcedureParameter("param1", String.class, ParameterMode.IN); query.registerStoredProcedureParameter("retval", Integer.class, ParameterMode.OUT); query.setParameter("param1", "test"); final Integer retval = (Integer) query.getOutputParameterValue("retval"); // this fails

Seems to have been introduced in 5.0.8.

Environment

Oracle

Status

Assignee

Gail Badner

Reporter

Stephen Fikes

Fix versions

Labels

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Affects versions

5.1.0
5.0.9

Priority

Major
Configure