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

PL/SQL Oracle Discussion :

Utilisation de merge dans le carte d'un insert or update


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Par défaut Utilisation de merge dans le carte d'un insert or update
    Bonjour,

    J'ai écris cette requete mais elle ne fait rien et je comprends pas pourquoi....

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MERGE INTO my_table D USING (SELECT * FROM my_table WHERE mon_id=2) S 
    ON (D.my_table=S.my_table) 
    WHEN NOT MATCHED THEN INSERT VALUES (2, 'mon libellé', sysdate)
    WHEN MATCHED THEN UPDATE SET mon_lib='mon libellé', last_move=sysdate;

    Sachant que ma table my_table est stucturée de la manière suivante :
    mon_id : number
    mon_lib : varchar2(1000)
    last_move : date

    avec une clé primiare sur mon_id

    Quand dans ma table j'ai pas de ligne correspondant à mon_id=2, il devrait faire un insert mais il ne fait rien
    Quand dans ma table j'ai une ligne correspondant à mon_id=2, il devrait faire un update mais il fait bien l'update.

    Merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Non c'est normal.
    Si votre requête dans le USING ne renvoie rien, il n'y a rien à faire.

    Pour faire un insert / update par rapport à des valeurs, il faut faire le USING en utilisant DUAL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     MERGE INTO my_table D
     USING (SELECT 2 as mon_id,
                   'mon libellé' as mon_lib
              FROM dual) S 
        ON (D.mon_id = S.mon_id)
      WHEN MATCHED THEN
    UPDATE SET D.mon_lib   = S.mon_lib,
               D.last_move = sysdate
      WHEN NOT MATCHED THEN
    INSERT VALUES (S.mon_id, S.mon_lib, sysdate);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Par défaut
    Merci. En effet, ca fonctionne

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

Discussions similaires

  1. Utilisation de MERGE dans Forms
    Par sphinx18 dans le forum Forms
    Réponses: 6
    Dernier message: 29/01/2009, 18h51
  2. Réponses: 2
    Dernier message: 02/07/2008, 02h26
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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