Bonjour,

je suis confronté à un problème lors du passage d'un tableau d'entiers de mon code Java vers une procédure stockée.

Dans ma base de données Oracle 9i, j'ai déclaré un type INTEGER_ARRAY :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
CREATE OR REPLACE
TYPE INTEGER_ARRAY AS TABLE OF NUMBER(10);
J'utilise ensuite ce type coté java pour transformer mon Tableau Java dans un type conpréhensible par Oracle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
long[] eleidsArray = new long[eleIds.size()];
[...]
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("INTEGER_ARRAY", currentConnection);
ARRAY oracleArray = new ARRAY(desc, currentConnection, eleidsArray)
Ce code fonctionne trés bien avec avec des petits tableaux. Par contre dès que la taille dépasse 13500 éléments j'ai une exception (ce qui pose un problème vu que mes tableaux peuvent dépasser les 200000 éléments) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
java.sql.SQLException: Arguments non valides dans l'appel
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
	at oracle.jdbc.dbaccess.DBItem.setArrayData(DBItem.java:262)
	at oracle.jdbc.dbaccess.DBDataSetImpl.setADTBindItem(DBDataSetImpl.java:2738)
	at oracle.jdbc.driver.OraclePreparedStatement.setARRAY(OraclePreparedStatement.java:1760)
	at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:3083)
	at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:3111)
et voici la déclaration de ma proc stock :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
  function getAttrData (
     docId integer,
	 evo integer,
	 idList integer_array
  )
   return XDB_ATTR_TYPE PIPELINED;
Je vous remercie d'avance.