I just started experimenting with Spring's StoredProcedure support. Simple cases are working fine. However, this one seems to be tricky.
I have a stored procedure (Oracle 9i) with the following signature:
Now I have a problem declaring the second parameter. I tried this:Code:PROCEDURE test(o_date OUT DATE, o_tbl OUT DBMS_SQL.VARCHAR2_TABLE, i_val IN NUMBER)
However I received an exception:Code:declareParameter(new SqlOutParameter("o_tbl", Types.ARRAY, "DBMS_SQL.VARCHAR2_TABLE", new SqlReturnType() { public Object getTypeValue(CallableStatement pCs, int paramIndex, int pSqlType, String pTypeName) throws SQLException { // TBD } }));
"Ungültiges Namensmuster" means "invalid name pattern".Code:org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call tg_dev.test(?, ?, ?)}]; SQL state [null]; error code [17074]; Ungültiges Namensmuster: DBMS_SQL.VARCHAR2_TABLE; nested exception is java.sql.SQLException: Ungültiges Namensmuster: DBMS_SQL.VARCHAR2_TABLE java.sql.SQLException: Ungültiges Namensmuster: DBMS_SQL.VARCHAR2_TABLE at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:412) at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:327) at oracle.sql.ArrayDescriptor.initPickler(ArrayDescriptor.java:1300) at oracle.sql.ArrayDescriptor.<init>(ArrayDescriptor.java:156) at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:113) at oracle.jdbc.driver.NamedTypeAccessor.otypeFromName(NamedTypeAccessor.java:92) at oracle.jdbc.driver.TypeAccessor.initMetadata(TypeAccessor.java:89) at oracle.jdbc.driver.T4CCallableStatement.allocateAccessor(T4CCallableStatement.java:500) at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:129) at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:168) at org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:201) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:803) at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:842) at org.springframework.jdbc.object.StoredProcedure.execute(StoredProcedure.java:100)
Has someone an idea about how to declare this correctly?
Thanks in advance,
Andreas
P.S.: The stored procedure itself is working fine, when invoked from a database client.


Reply With Quote
