You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Brett Knights (JIRA)" <ib...@incubator.apache.org> on 2007/01/19 20:09:30 UTC

[jira] Created: (IBATIS-385) Setting Out Parameter for Stored Procedure fails. Error says call "getMoreResults

Setting Out Parameter for Stored Procedure fails. Error says call "getMoreResults
---------------------------------------------------------------------------------

                 Key: IBATIS-385
                 URL: https://issues.apache.org/jira/browse/IBATIS-385
             Project: iBatis for Java
          Issue Type: Bug
          Components: SQL Maps
    Affects Versions: 2.2.0
         Environment: jTDS against MS SQL Server 2000. Java 1.4.2_13
            Reporter: Brett Knights


I'm calling getSqlMapClientTemplate().insert on a stored procedure with one output parameter.

 	<parameterMap id="insertUserParams" class="com.tanner.eda.model.User" >
		<parameter property="id"                  jdbcType="INTEGER" javaType="java.lang.Long"   mode="OUT"/>
		<parameter property="accountId"           jdbcType="INTEGER" javaType="java.lang.Long"   mode="IN"/>
		 ...
	</parameterMap>
	
	<procedure id="addUser" parameterMap="insertUserParams">
	{call tewciWebUser (?,?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}
	</procedure>

I've lost the exact error message but it told me that     SqlExecutor. executeUpdateProcedure  was calling retrieveOutputParameters(request, cs, mappings, parameters, null); before any available record sets or result counts had been cleared. 

To fix this I inserted the following at line after cs.execute (line 226 on my copy of the source)
      rows = clearResults(cs);

and added the following method to the SqlExecutor:
	private int clearResults(Statement stmt) throws SQLException{
	int rowCount = 0;
	 while(true){
		 if(moveToNextResultsSafely(stmt)){
			 ResultSet rs = stmt.getResultSet();
			 if( rs != null){
				 rs.close();
				 continue;
			 }
		 }
		 else{
			 int availRows = stmt.getUpdateCount();
			 if(availRows >= 0) {
				rowCount += availRows;
				continue;
			 }
		 }
		 break;
	 }
	 return rowCount;
  }


executeUpdateProcedure

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira