You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Jens Borrack <bo...@tembit.de> on 2008/03/10 17:28:47 UTC

"invalid row index" parameter registration Problem

Problem:
The "invalid row index" Problem occurs, when i try to execute a stored procedure on Oracle 10.2.0.1.0. This particular procedure has 60 in and 1 out parameters. The interesting point is, that a similar procedure with only 13/1 in/out parameters works fine. So maybe there is any limit for the parameters?
Plain JBDC calls worked well with the last Versions of our application, but after we planned switching to iBatis we hit this barrier.


So far i tried:
-using different oracle drivers
-using different jdbc/java types as described at http://download.oracle.com/docs/cd/B10501_01/java.920/a96654/basic.htm#1001613
-calling the plsql script as function or as stored procedure -using different positions for the affected parameter in my ParameterMap (which resulted in different outputs of the same kind of error)

-----parameterMap
 <parameterMap id="insertFttAppMap" class="java.util.HashMap">
	 	<parameter property="v_id" jdbcType="INTEGER" mode="OUT"/>
  		<parameter property="con_id" jdbcType="INTEGER" mode="IN"/>
  		<parameter property="startpos" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="endpos" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="execdate" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="valuedate" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="creationdate" jdbcType="VARCHAR" mode="IN"/> ... (61 in total)
  		<parameter property="chargeaccnbr" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="payrunid" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="payrundt" jdbcType="VARCHAR" mode="IN"/> </parameterMap> 


-----procedure
<procedure id="insertFttAppTransaction" parameterMap="insertFttAppMap">
  	{ call SPTRANSACTIONINSERT_PROC (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}
</procedure>


-----Stack Trace
--- The error occurred in ibatis/SQLJobDAO_Extensions.xml.  
--- The error occurred while applying a parameter map.  
--- Check the SQLJobDAO_Extensions.insertFttAppMap.  
--- Check the parameter mapping for the 'payrunid' property.  
--- Cause: java.sql.SQLException: Ungültiger Spaltenindex -->(invalid row index)
	at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:91)
	at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:505)
	at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
	at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:67)
	at com.tembit.tpf.dao.impl.SQLjobDAO_Extensions.insertFttAppTransaction(SQLjobDAO_Extensions.java:163)
	at com.tembit.ftt.converter.PfJob.getTransaction(PfJob.java:496)
	at com.tembit.ftt.converter.PfJob.getSlot(PfJob.java:406)
	at com.tembit.ftt.converter.PfJob.getElements(PfJob.java:324)
	at com.tembit.ftt.converter.PfJob.run(PfJob.java:279)
	at java.util.TimerThread.mainLoop(Timer.java:512)
	at java.util.TimerThread.run(Timer.java:462)
Caused by: java.sql.SQLException: Ungültiger Spaltenindex
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5306)
	at oracle.jdbc.driver.OracleCallableStatement.setString(OracleCallableStatement.java:4541)
	at com.ibatis.sqlmap.engine.type.StringTypeHandler.setParameter(StringTypeHandler.java:30)
	at com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:69)
	at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
	at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
	at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdateProcedure(SqlExecutor.java:228)
	at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteUpdate(ProcedureStatement.java:30)
	at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)
	... 10 more

Since i lack any more ideas to solve the problem, i would be thankful for your support.
Jens Borrack


RE: "invalid row index" parameter registration Problem

Posted by Jens Borrack <bo...@tembit.de>.
Hi Chris,
indeed one '?' was missing. But adding another one didnt't change the
error. If i add two, i get the excpected error PLS-00306 for the wrong
number of arguments. 

Supplying even less ? Arguments results in shifting the defect column
index message:

...
--- Check the parameter mapping for the 'chargeaccnbr' property. 
...


RE: "invalid row index" parameter registration Problem

Posted by Chris O'Connell <oc...@gorillachicago.com>.
I only counted 60 "?" in your sql.  Are you missing one?

-----Original Message-----
From: Jens Borrack [mailto:borrack@tembit.de] 
Sent: Monday, March 10, 2008 11:29 AM
To: user-java@ibatis.apache.org
Subject: "invalid row index" parameter registration Problem

Problem:
The "invalid row index" Problem occurs, when i try to execute a stored
procedure on Oracle 10.2.0.1.0. This particular procedure has 60 in and 1
out parameters. The interesting point is, that a similar procedure with only
13/1 in/out parameters works fine. So maybe there is any limit for the
parameters?
Plain JBDC calls worked well with the last Versions of our application, but
after we planned switching to iBatis we hit this barrier.


So far i tried:
-using different oracle drivers
-using different jdbc/java types as described at
http://download.oracle.com/docs/cd/B10501_01/java.920/a96654/basic.htm#10016
13
-calling the plsql script as function or as stored procedure -using
different positions for the affected parameter in my ParameterMap (which
resulted in different outputs of the same kind of error)

-----parameterMap
 <parameterMap id="insertFttAppMap" class="java.util.HashMap">
	 	<parameter property="v_id" jdbcType="INTEGER" mode="OUT"/>
  		<parameter property="con_id" jdbcType="INTEGER" mode="IN"/>
  		<parameter property="startpos" jdbcType="VARCHAR"
mode="IN"/>
  		<parameter property="endpos" jdbcType="VARCHAR" mode="IN"/>
  		<parameter property="execdate" jdbcType="VARCHAR"
mode="IN"/>
  		<parameter property="valuedate" jdbcType="VARCHAR"
mode="IN"/>
  		<parameter property="creationdate" jdbcType="VARCHAR"
mode="IN"/> ... (61 in total)
  		<parameter property="chargeaccnbr" jdbcType="VARCHAR"
mode="IN"/>
  		<parameter property="payrunid" jdbcType="VARCHAR"
mode="IN"/>
  		<parameter property="payrundt" jdbcType="VARCHAR"
mode="IN"/> </parameterMap> 


-----procedure
<procedure id="insertFttAppTransaction" parameterMap="insertFttAppMap">
  	{ call SPTRANSACTIONINSERT_PROC (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}
</procedure>


-----Stack Trace
--- The error occurred in ibatis/SQLJobDAO_Extensions.xml.  
--- The error occurred while applying a parameter map.  
--- Check the SQLJobDAO_Extensions.insertFttAppMap.  
--- Check the parameter mapping for the 'payrunid' property.  
--- Cause: java.sql.SQLException: Ungültiger Spaltenindex -->(invalid row
index)
	at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(Ge
neralStatement.java:91)
	at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDe
legate.java:505)
	at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.jav
a:90)
	at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:
67)
	at
com.tembit.tpf.dao.impl.SQLjobDAO_Extensions.insertFttAppTransaction(SQLjobD
AO_Extensions.java:163)
	at com.tembit.ftt.converter.PfJob.getTransaction(PfJob.java:496)
	at com.tembit.ftt.converter.PfJob.getSlot(PfJob.java:406)
	at com.tembit.ftt.converter.PfJob.getElements(PfJob.java:324)
	at com.tembit.ftt.converter.PfJob.run(PfJob.java:279)
	at java.util.TimerThread.mainLoop(Timer.java:512)
	at java.util.TimerThread.run(Timer.java:462)
Caused by: java.sql.SQLException: Ungültiger Spaltenindex
	at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at
oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedS
tatement.java:5306)
	at
oracle.jdbc.driver.OracleCallableStatement.setString(OracleCallableStatement
.java:4541)
	at
com.ibatis.sqlmap.engine.type.StringTypeHandler.setParameter(StringTypeHandl
er.java:30)
	at
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHan
dler.java:69)
	at
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(Ba
sicParameterMap.java:165)
	at
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(B
asicParameterMap.java:125)
	at
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdateProcedure(SqlExe
cutor.java:228)
	at
com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteUpda
te(ProcedureStatement.java:30)
	at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(Ge
neralStatement.java:78)
	... 10 more

Since i lack any more ideas to solve the problem, i would be thankful for
your support.
Jens Borrack