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

SQL Oracle Discussion :

Problème avec Merge


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème avec Merge
    Bonsoir tous le monde,

    Alors je vous explique...je fais un merge dans une page php. Je suis obligé d'utiliser les fonction obsolète d'OCI8...alors je compare les champs d'une table a savoir HMV_SUIV par rapport a des variables php...s'il y a concordance je fais un update, aussi non je fais un insert...

    Voila a quoi ressemble ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "MERGE INTO HMV_SUIV e
    USING (SELECT * FROM dual) p
    ON (e.UNT_NID=".$_POST["unite"].",
    	 e.SEC_NID=".$SEC_NID.",
    	 e.MNCITEM_NID=".$MNCITEM_NID.",
    	 e.TRTMT_MOIS='".$_POST["mois"]."',
    	 e.TRTMT_ANNEE=".$_POST["annee"].")
    WHEN MATCHED THEN
    UPDATE SET e.PRLVMT_NNOMBRE = ".$PRLVMT_NNOMBRE."
    WHEN NOT MATCHED THEN
    INSERT(e.UNT_NID,e.PRLVMT_NNOMBRE,e.SEC_NID,e.MNCITEM_NID,e.TRTMT_MOIS,e.TRTMT_ANNEE)
    VALUES(".$_POST["unite"].",".$PRLVMT_NNOMBRE.",".$SEC_NID.",".$MNCITEM_NID.",'".$_POST["mois"]."',".$_POST["annee"].")";

    mais je ne sais pas si l'on peut l'utiliser de cette manière. Ça ne fonctionne pas...Un coup de pouce serait le bien venu.
    Je vous remercie
    Bonne soirée

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    L'exemple suivant fonctionne, donc en principe ta requete devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    MERGE INTO MaTable t
    USING (SELECT * FROM dual) p
          ON (t.MonId=99)
    WHEN MATCHED THEN
         UPDATE SET t.MaColonne = 'B'
    WHEN NOT MATCHED THEN
         INSERT(MonId, MaColonne)
    VALUES(99, 'A');
    Est ce que tu obtiens un message d'erreur ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Plusieurs remarques / questions :
    1. Quelle est votre version d'Oracle ? Merge est arrivé en 9i.
    2. Êtes-vous sûr de toutes ces doubles quotes au niveau de vos variables ?
    3. Dans la partie ON du MERGE, c'est du SQL on utilise AND / OR pour utiliser plusieurs prédicats
    4. Évitez les select *, autant mettre vos constantes dans ce dernier :

    Au final :
    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
     MERGE INTO HMV_SUIV e
     USING (SELECT ".$_POST["unite"]." as UNT_NID    ,
                   ".$SEC_NID."        as SEC_NID    ,
                   ".$MNCITEM_NID."    as MNCITEM_NID,
                   ".$_POST["mois"]."  as TRTMT_MOIS ,
                   ".$_POST["annee"]." as TRTMT_ANNEE,
                   ".$PRLVMT_NNOMBRE." as PRLVMT_NNOMBRE
              FROM DUAL) p
        ON (e.UNT_NID     = p.UNT_NID
       AND  e.SEC_NID     = p.SEC_NID
       AND  e.MNCITEM_NID = p.MNCITEM_NID
       AND  e.TRTMT_MOIS  = p.TRTMT_MOIS
       AND  e.TRTMT_ANNEE = p.TRTMT_ANNEE)
      WHEN MATCHED THEN UPDATE
       SET e.PRLVMT_NNOMBRE = p.PRLVMT_NNOMBRE
      WHEN NOT MATCHED THEN
    INSERT (e.UNT_NID, e.PRLVMT_NNOMBRE, e.SEC_NID, e.MNCITEM_NID, e.TRTMT_MOIS, e.TRTMT_ANNEE)
    VALUES (p.UNT_NID, p.PRLVMT_NNOMBRE, p.SEC_NID, p.MNCITEM_NID, p.TRTMT_MOIS, p.TRTMT_ANNEE);

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    Merci pour vos réponses la nuit dernière j'ai enfin trouvé la solution.Je la poste pour d'autre personne qui doivent tout comme moi utiliser qu'une seule table et des variable php avec plusieurs conditions.
    Effectivement c'etait des and et non pas des "," a ajouter dans le ON.
    Voici ma requtete fonctionnelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     MERGE INTO HMV_SUIV e
     USING (SELECT * FROM dual) p
     ON (e.UNT_NID=".$_POST["unite"]."
     AND e.SEC_NID=".$SEC_NID."
     AND e.MNCITEM_NID=".$MNCITEM_NID."
     AND e.TRTMT_MOIS='".$_POST["mois"]."'
     AND e.TRTMT_ANNEE=".$_POST["annee"].")
     WHEN MATCHED THEN
     UPDATE SET e.PRLVMT_NNOMBRE = ".$PRLVMT_NNOMBRE."
     WHEN NOT MATCHED THEN
     INSERT(e.UNT_NID,e.PRLVMT_NNOMBRE,e.SEC_NID,e.MNCITEM_NID,e.TRTMT_MOIS,e.TRTMT_ANNEE)
     VALUES (".$_POST["unite"].", ".$PRLVMT_NNOMBRE.",".$SEC_NID.",".$MNCITEM_NID.",'".$_POST["mois"]."',".$_POST["annee"].")";
    Bonne continuation a vos tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec "merge"
    Par louisreglain dans le forum R
    Réponses: 3
    Dernier message: 13/05/2015, 17h10
  2. [2008R2] Toujours des problèmes avec MERGE
    Par Kropernic dans le forum Développement
    Réponses: 30
    Dernier message: 06/08/2014, 11h33
  3. Problème avec MERGE
    Par didinet dans le forum SAS Base
    Réponses: 9
    Dernier message: 07/08/2008, 16h52
  4. Problème avec Merge
    Par Thomad dans le forum PL/SQL
    Réponses: 1
    Dernier message: 16/07/2008, 22h11
  5. 9i : problème avec MERGE INTO
    Par Vld44 dans le forum SQL
    Réponses: 1
    Dernier message: 16/08/2007, 11h27

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