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

Oracle Discussion :

MERGE sans clause WHEN NOT MATCHED


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 50
    Points : 43
    Points
    43
    Par défaut MERGE sans clause WHEN NOT MATCHED
    Bonjour,

    Je souhaiterais savoir s'il est possible (en fait j'ai déjà recherché mais je n'ais pas de réponse) de faire un MERGE sans clause WHEN NOT MATCHED

    Je suis en version 9iR2 (pour la syntaxe).

    Merci par avance
    don't worry, be happy!

  2. #2
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par Patmane
    Bonjour,

    Je souhaiterais savoir s'il est possible (en fait j'ai déjà recherché mais je n'ais pas de réponse) de faire un MERGE sans clause WHEN NOT MATCHED

    Je suis en version 9iR2 (pour la syntaxe).

    Merci par avance
    çà revient un peu un UPDATE alors ?

    y'a un truc que je pige pas là
    PpPool

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    Pas d'accord

    Donne moi le Update (aussi peu couteux qui plus est) que cette instruction merge (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MERGE INTO detailFacture df
    USING (SELECT * FROM facture WHERE mag=0) f 
    ON (df.numFacture=f.id)
    WHEN MATCHED THEN 
      UPDATE SET dateFac=f.dateFac, dateLiv=f.dateLiv, mag=f.mag;
    Voila je voudrais faire un truc un peu comme ca, mais ca ne compile pas car le WHEN NOT MATCHED est obligatoire (et le INSERT obligatoire derrière WHEN NOT MATCHED)
    don't worry, be happy!

  4. #4
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Merge 
    ...
    When Not Matched Then
      Insert <...> Values <...> Where 1=2
      ;
    End;

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    oui je voudrais bien mais..... j'ai pas le droit de mettre une clause where dans le INSERT d'un WHEN NOT MATCHED!!!
    don't worry, be happy!

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Un update du style est-il réellement beaucoup moins performant que l'instruction merge ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    update detailFacture
    set (dateFac, dateLiv, mag) =
        (select dateFac, dateLiv, mag
         from facture
         where mag = 0
           and id = numFacture)
    where exists (select 1 
                  from facture 
                  where mag = 0 
                    and id = numFacture)
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    Et bien c'est la solution que j'ai pour le moment en production, mais c'est effectivement bien plus lourd que le MERGE. Enfin faute de solution, je vais rester sur un UPDATE!
    Merci quand même
    don't worry, be happy!

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Ce sujet date un peu, mais tombant dessus par une recherche, je me dis que je peux toujours être utile.

    Une requète comme celle ci-dessous est peut être moche mais je l'espère, efficace quand on veut mettre a jour une table à partir d'une autre, SANS INSERT.
    (En sélectionnant les bonnes données dans le champ USING, le WHEN NOT MATCHED n'est jamais appelé


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MERGE INTO detailFacture df
    USING (
          SELECT facture.* 
          FROM facture,detailFacture  
         WHERE mag=0 AND detailFacture.numFacture=facture.id) f 
    ON (df.numFacture=f.id)
    WHEN MATCHED THEN 
      UPDATE SET dateFac=f.dateFac, dateLiv=f.dateLiv, mag=f.mag
    When NOT Matched Then
      INSERT <...> VALUES <...> ;

Discussions similaires

  1. [11g] MERGE WHEN NOT MATCHED en une seule instruction ?
    Par ctobini dans le forum SQL
    Réponses: 4
    Dernier message: 07/08/2014, 14h59
  2. SQL Loader + CSV (sans noms de colonne) + clause WHEN
    Par surfman dans le forum SQL*Loader
    Réponses: 5
    Dernier message: 10/09/2009, 14h15
  3. Réponses: 1
    Dernier message: 10/05/2006, 12h11
  4. Réponses: 11
    Dernier message: 08/10/2004, 15h12
  5. [Plugin]package does not match the expected package src
    Par Fladnag dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 10/03/2004, 20h17

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