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 :

[10g] Commande MERGE


Sujet :

Oracle

  1. #1
    Membre confirmé Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Par défaut [10g] Commande MERGE
    Bonjour,
    j'aimerai savoir s'il est possible d'utiliser la commande MERGE avec une seule Table. Tous les exemple que j'ai trouvé mette en jeu 2 tables et les mot clés using et on sont obligatoire.

    voici ce que j'ai écrit, mais ca na marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    merge into DFIL c
      using (select DFIL_UTIL_ID from DFIL where DFIL_UTIL_ID = 100) s
      on (s.DFIL_UTIL_ID = c.DFIL_UTIL_ID)
      when matched then
        update set DFIL_ELAB_CODE = '0',DFIL_ERES_CODE = '0',DFIL_EREG_CODE = '0',
          DFIL_EZON_CODE = '0',DFIL_ESCO_CODE = '0'
        where DFIL_UTIL_ID = 100
      when not matched then
        insert (DFIL_UTIL_ID,DFIL_ELAB_CODE,DFIL_ERES_CODE,DFIL_EREG_CODE,DFIL_EZON_CODE,DFIL_ESCO_CODE)
        values (100,'0','0','0','0','0');
    Merci d'avance

  2. #2
    Membre confirmé Avatar de links
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 113
    Par défaut
    Bonjour,
    Je et propose la modification suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    merge into DFIL c
      using (select DFIL_UTIL_ID from DFIL where DFIL_UTIL_ID = 100) s
      on (s.DFIL_UTIL_ID = c.DFIL_UTIL_ID)
    and (DFIL_UTIL_ID = 100)
      when matched then
        update set DFIL_ELAB_CODE = '0',DFIL_ERES_CODE = '0',DFIL_EREG_CODE = '0',
          DFIL_EZON_CODE = '0',DFIL_ESCO_CODE = '0'
      when not matched then
        insert (DFIL_UTIL_ID,DFIL_ELAB_CODE,DFIL_ERES_CODE,DFIL_EREG_CODE,DFIL_EZON_CODE,DFIL_ESCO_CODE)
        values (100,'0','0','0','0','0');
    autrement dit enlever le where au niveau du update et le mettre comme condition suplémentaire au niveau de using.
    essaye ça devrai marcher

  3. #3
    Membre confirmé Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Par défaut
    J'ai essayé ta solution. Ca marche pour le Update masi pas pour l'insert.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    merge into DFIL c
      using (select DFIL_UTIL_ID from DFIL where DFIL_UTIL_ID = 102) s
      on (s.DFIL_UTIL_ID = c.DFIL_UTIL_ID and DFIL_UTIL_ID = 102)
      when matched then
        update set DFIL_ELAB_CODE = '0',DFIL_ERES_CODE = '0',DFIL_EREG_CODE = '0',
          DFIL_EZON_CODE = '0',DFIL_ESCO_CODE = '0'
      when not matched then
        insert (DFIL_UTIL_ID,DFIL_ELAB_CODE,DFIL_ERES_CODE,DFIL_EREG_CODE,DFIL_EZON_CODE,DFIL_ESCO_CODE)
        values (102,'0','0','0','0','0');
    et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    merge into DFIL c
      using (select DFIL_UTIL_ID from DFIL) s
      on (s.DFIL_UTIL_ID = c.DFIL_UTIL_ID and s.DFIL_UTIL_ID = 102)
      when matched then
        update set DFIL_ELAB_CODE = '0',DFIL_ERES_CODE = '0',DFIL_EREG_CODE = '0',
          DFIL_EZON_CODE = '0',DFIL_ESCO_CODE = '0'
      when not matched then
        insert (DFIL_UTIL_ID,DFIL_ELAB_CODE,DFIL_ERES_CODE,DFIL_EREG_CODE,DFIL_EZON_CODE,DFIL_ESCO_CODE)
        values (102,'0','0','0','0','0');
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-00001: unique constraint violated

  4. #4
    Membre confirmé Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127

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

Discussions similaires

  1. équivalent de la commande MERGE dans mySQL ?
    Par Ekimasu dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/10/2007, 21h45
  2. commande merge oracle
    Par mollux dans le forum SQL
    Réponses: 7
    Dernier message: 05/09/2007, 14h07
  3. Commande MERGE sous ORACLE 9.2.0.6
    Par Cofondinde dans le forum Oracle
    Réponses: 5
    Dernier message: 19/07/2007, 19h42
  4. la commande merge
    Par daliok dans le forum Oracle
    Réponses: 1
    Dernier message: 05/01/2007, 18h43
  5. [Oracle]commande MERGE sur une seule table
    Par DoRiane dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/08/2006, 17h13

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