Bonjour.
J'ai un problème pour appeler une procédure dans Hibernate (3.4) :
J'ai une procédure qui me permet de déplacer des données d'une table vers une autre
Je voudrais que cette procédure me retourne un booleen (P_retourOK) pour me dire si tout c'est bien passé ou pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 PACKAGE BODY PACK_DEFICARD_VALID_COM AS PROCEDURE F_Validation(P_retourOK OUT BOOLEAN, P_NuCom IN COM.NU_COM%TYPE, P_NoGrp IN GRP.NO_GRP%TYPE, P_NuComTmp IN COM_TMP.NU_COM_TMP%TYPE) IS BEGIN P_retourOK := true; SELECT ID_ADR_SEQ.NEXTVAL INTO w_idAdr FROM DUAL; SELECT ID_ADR_TMP INTO w_idAdrTmp FROM COM_TMP WHERE NU_COM_TMP = P_NuComTmp AND NO_GRP = P_NoGrp; INSERT INTO ADR (ID_ADR, TP_ADR, NOM, NOM_COMPLEMENT, NOM_RUE, NOM_COMPLEMENTRUE, NOM_LIEUDIT, CD_POSTAL, NOM_VILLE, NOM_PAYS, BO_NPAI) SELECT w_idAdr, TP_ADR, NOM, NOM_COMPLEMENT, NOM_RUE, NOM_COMPLEMENTRUE, NOM_LIEUDIT, CD_POSTAL, NOM_VILLE, NOM_PAYS, BO_NPAI FROM ADR_TMP WHERE ID_ADR_TMP = w_idAdrTmp; INSERT INTO COM (NU_COM, ID_ADR, NOM_COM, NOM_ENSEIGNE, NO_TELEPHONE, NO_FAX, NO_GRP, CD_NAF, HHMN_MINAPPEL) SELECT P_NuCom, w_idAdr, NOM_COM, NOM_ENSEIGNE, NO_TELEPHONE, NO_FAX, NO_GRP, CD_NAF, HHMN_MINAPPEL FROM COM_TMP WHERE NU_COM_TMP = P_NuComTmp AND NO_GRP = P_NoGrp; DELETE FROM COM_TMP WHERE NU_COM_TMP = P_NuComTmp AND NO_GRP = P_NoGrp; DELETE FROM ADR_TMP WHERE ID_ADR_TMP = w_idAdrTmp; EXCEPTION WHEN OTHERS THEN P_retourOK := false; END; END;
Je l'appel grace à hibernate
Si je retire le paramètre retourOK, il n'y a aucun problème, la procédure ce lance, par contre avec se paramètre j'ai une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 String sql = "CALL PACK_DEFICARD_VALID_COM.F_Validation( :retourOK, :nuCom, :noGrp, :nuComTmp)"; SQLQuery query = getSession().getHibernateSession().createSQLQuery(sql); query.setParameter(param.getName(), param.getValue(), param.getType()); query.setParameter("retourOK", retourOK, PlSqlType.BOOLEAN)); query.setParameter("nuCom", nu_com, PlSqlType.INTEGER)); query.setParameter("noGrp", no_grp, PlSqlType.STRING)); query.setParameter("nuComTmp", nu_com_tmp, PlSqlType.INTEGER)); query.executeUpdate();
ORA-06553: PLS-306: numéro ou types d'arguments erronés dans appel à 'F_VALIDATION'
org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
j'ai vu qu'on pouvait mappé une procédures stockées grace à une requête nommée mais si j'ai bien compris on ne peut retourner qu'un curseur.
Quelqu'un serait-il a même de m'aider?
D'avance, merci
Partager