Hello,
J'ai quelques soucis en ce qui concerne l'appel d'une stored procedure sur une base de donnée Oracle.
Il existe dans ma DB une procédure prenant en compte une cinquantaine de paramètres en entrée et 2 valeurs de retour (en fait les 2 derniers paramètres sont en INOUT).
J'essaie tant bien que mal d'exécuter cette procédure mais sans succès.
Une NullPointerException apparait lors de l'appel à transaction.execute().
Etant complètement novice, je ne vois pas du tout d'où cela pourrait venir. Il me semble que la procédure est effectivement trouvée car lorsque je retire des paramètres, une exception apparait indiquant que le nombre de paramètres est faux.
Voici le code:
Code:
public boolean add(ProductSpecs productSpecs) {
Session session = (Session) HibernateUtil.currentSession();
final Transaction transaction = session.beginTransaction();
try {
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
try {
CallableStatement call = connection.prepareCall("{?, ? = call bksgnvcrm.createorreturnproduct1nc(" +
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?," +
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " +
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
call.registerOutParameter(1, OracleTypes.INTEGER);
call.registerOutParameter(2, OracleTypes.VARCHAR);
int i = 3;
call.setString(i++, typeofproduct);
call.setString(i++, shiptositenumber);
call.setString(i++, billtositenumber);
call.setString(i++, ordernumber);
call.setInt(i++, orderid);
call.setString(i++, customerorderreference);
call.setString(i++, productreference);
...
call.setString(i++, servicerequestnumber);
call.setString(i++, reasoncode);
call.setString(i++, cpsname);
call.setString(i++, flexibilityflag);
call.setInt(i++, errcode);
call.setString(i++, errmsg);
call.execute(); ------> NullPointerException
System.out.println("err_code: " + call.getString(1));
System.out.println("err_msg: " + call.getString(2));
transaction.commit();
} catch (SQLException e) {
throw new SQLException(e);
}
}
});
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
return false;
}
return true;
}
Un peu d'aide serait la bienvenue ;)