[ http://issues.apache.org/jira/browse/IBATIS-153?page=comments#action_12314141 ]
Sven Boden commented on IBATIS-153: ----------------------------------- Got it... can you have a look at the examples in IBATIS-53 showing the use of ref cursors. And if you do it that way it should work, however when you then switch debugging on, you have to apply the fix for IBATIS-152 (or you will get a NullPointerException in another location). Regards, Sven > NullPointer exception during call of oracle stored procedure with REF CURSOR > as output parameter > ------------------------------------------------------------------------------------------------- > > Key: IBATIS-153 > URL: http://issues.apache.org/jira/browse/IBATIS-153 > Project: iBatis for Java > Type: Bug > Components: SQL Maps > Versions: 2.1.0 > Environment: Oracle 9. > Reporter: ppz4j > > the invocation of an oracle stored procedura with REF CURSOR as output > parameter raises a NullPointerException. > The procedure's signature is : > PROCEDURE test ( > out_cur OUT my_cur, > out_err_code OUT NUMBER, > out_err_text OUT VARCHAR2 > ) > where TYPE my_cur IS REF CURSOR; > and ibatis configuration is : > > <parameterMap id="params" class="map"> > <parameter property="Out_Cur" jdbcType="ORACLECURSOR" mode="OUT"/> > <parameter property="out_err_code" jdbcType="INTEGER" mode="OUT"/> > <parameter property="out_err_text" jdbcType="VARCHAR" mode="OUT"/> > </parameterMap> > <resultMap id="result" class="it.app.test.Stock"> > <result property="idInstrument" column="id_instrument"/> > <result property="shortName" column="shortname"/> > <result property="refPrice" column="refprice"/> > </resultMap> > <procedure id="getOptions" resultMap="result" parameterMap="params"> > { call OPT_USER.TEST.TEST_CURSOR(?,?,?) } > </procedure> > the exception stack trace is: > Caused by: > java.lang.NullPointerException > at > com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:352) > at > com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQueryProcedure(SqlExecutor.java:291) > at > com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteQuery(ProcedureStatement.java:34) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584) > at > com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:105) > at > com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78) > at it.imiweb.app.data.DataModelTest.testOptions(DataModelTest.java:295) > at it.imiweb.app.data.DataModelTest.main(DataModelTest.java:445) > Looking inside the code it seems that the problem is due to the invocation > of the follow instruction: > rs = cs.getResultSet() > in method executeQueryProcedure of SQLExcecutor class that returns a null > value instead of the resultset as the stored procedure output. To > successfully invoke the procedure i have modified the code as follow: > public void executeQueryProcedure(RequestScope request, Connection conn, > String sql, Object[] parameters, > int skipResults, int maxResults, > RowHandlerCallback callback) > ... > ... > cs.execute(); > > //this method returns always null > //rs = cs.getResultSet(); > > //with this code is possible to get the resultset even if the procedure > returns more than one output parameter > retrieveOutputParameters(cs, mappings, parameters); > for ( int ii = 0; ii < parameters.length; ii++ ) { > if ( parameters[ii] instanceof ResultSet ) { > rs = ( ResultSet ) parameters[ii]; > break; > } > } > //end added code > > errorContext.setMoreInfo("Check the results (failed to retrieve > results)."); > handleResults(request, rs, skipResults, maxResults, callback); > errorContext.setMoreInfo("Check the output parameters (retrieval of > output parameters failed)."); > //commented because it's already invoked and another call will throw an > exception > //retrieveOutputParameters(cs, mappings, parameters); > ... > ... > } > The driver jdbc is : > Manifest-Version: 1.0 > Specification-Title: "Oracle JDBC driver classes for use with JDK1.4" > Specification-Version: "Oracle JDBC Driver version - 9.0.2.0.0" > Specification-Vendor: "Oracle Corporation" . > Implementation-Title: "ojdbc14.jar" > Implementation-Version: "Oracle JDBC Driver version - 9.0.2.0.0" > Implementation-Vendor: "Oracle Corporation" > Implementation-Time: "Tue Apr 6 01:10:57 2004" > Can you help me, please ? -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira