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 :
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 CREATE OR REPLACE TYPE INTEGER_ARRAY AS TABLE OF NUMBER(10);
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 long[] eleidsArray = new long[eleIds.size()]; [...] ArrayDescriptor desc = ArrayDescriptor.createDescriptor("INTEGER_ARRAY", currentConnection); ARRAY oracleArray = new ARRAY(desc, currentConnection, eleidsArray)
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
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)
Je vous remercie d'avance.
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;
Partager