IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

Appel procédure PL/SQL avec Hibernate avec paramètre retour OUT


Sujet :

Persistance des données Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Appel procédure PL/SQL avec Hibernate avec paramètre retour OUT
    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
    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 voudrais que cette procédure me retourne un booleen (P_retourOK) pour me dire si tout c'est bien passé ou pas.
    Je l'appel grace à hibernate

    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();
    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:
    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

  2. #2
    Membre actif
    Avatar de karbos
    Inscrit en
    Novembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 155
    Points : 255
    Points
    255
    Par défaut
    Est-ce que tu peux faire le test avec un INTEGER à la place du BOOLEAN ? Des fois Hibernate + Oracle + Boolean ça marche pas très bien...

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String sql = "CALL PACK_DEFICARD_VALID_COM.F_Validation( ?,  :nuCom, :noGrp, :nuComTmp)";
    SQLQuery query = getSession().getHibernateSession().createSQLQuery(sql); 
    query.setParameter("nuCom", nu_com, PlSqlType.INTEGER));
    query.setParameter("noGrp", no_grp, PlSqlType.STRING));
    query.setParameter("nuComTmp", nu_com_tmp, PlSqlType.INTEGER));
    Object result = query.uniqueResult();

Discussions similaires

  1. Log Hibernate avec affichage des paramètres
    Par romaintaz dans le forum Hibernate
    Réponses: 1
    Dernier message: 17/08/2007, 12h17
  2. essai "debuter avec hibernate" avec MYSQL et j'y arrive pas
    Par alligator424 dans le forum Hibernate
    Réponses: 5
    Dernier message: 08/08/2007, 14h02
  3. Appel Procédure stockée SQL qui plante
    Par Daniel MOREAU dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/04/2007, 08h55
  4. Procédures stockées SQL Server compatibles avec MySQL ?
    Par Nen'S dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/01/2006, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo