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 commande Merge


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut Problème commande Merge
    Bonjour à tous,

    j'essaie d'implémenter la commande Merge dans mon projet cependant je rencontre un souci lorsqu'il s'agit de faire l'insertion.
    Pour la mise à jour cela fonctionne
    voici ma requete

    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
    40
    41
    42
    43
     
    MERGE into budget_copi b
    using 
    (select a.rowid, a.* from budget_copi a
    where DP_COPI = '05036A'
    and ANNEE = 2009
    and DATE_COPI= to_date('12/07/2007')
    and METIER = 'ME'
    and CODE_TYPE_DEMANDE = 3
    and CODE_FOUR_COPI = 6) tmp
    ON 
    (
    tmp.rowid = b.rowid)
     
    WHEN MATCHED THEN UPDATE SET
         b.JH_COUTTOTAL = 1000, 
         b.JH_ARBDEMANDES = 2000, 
         b.JH_ARBDECIDES =3000, 
         b.JH_CANTDEMANDES =4000, 
         b.JH_CANTDECIDES =5000, 
         b.JH_PREVIDECIDE = 6000
     
     
     
    WHEN NOT MATCHED THEN 
     
    INSERT (
    b.DP_COPI,b.ANNEE,b.DATE_COPI, b.METIER, b.CODE_TYPE_DEMANDE, b.CODE_FOUR_COPI,
            b.JH_COUTTOTAL, 
         b.JH_ARBDEMANDES, 
         b.JH_ARBDECIDES, 
         b.JH_CANTDEMANDES, 
         b.JH_CANTDECIDES, 
         b.JH_PREVIDECIDE
      )
      VALUES ('05036A',2009,to_date('12/07/2007'),'ME',3,6,
          1000,
           2000,
           3000,
           4000,
           5000,
           6000
      );
    voyez vous une erreur ou une astuce pour m'aider à résoudre le problème?

    Merci d'avance

    Antoine

  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
    Utiliser un to_date sans format c'est suicidaire, remplacez vos to_date('12/07/2007') par to_date('12/07/2007', 'dd/mm/yyyy').

    Quand vous dites ça ne marche pas, soyez plus précis.
    Un message d'erreur, pas de données insérées ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut
    ok merci pour le conseil du to_date() je ferai la modification

    le problème que je rencontre c'est qu'aucune donnée ne s'insère, et aucun message d'erreur s'affiche

    Antoine

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    Votre utilisation du merge n'est pas très adaptée.
    Vous faîte un merge dans une table en utilisant une requête sur la même table.
    Si la requête ne ramène rien, rien ne se passera, et quand elle ramène des résultats, ça semble logique que ça "MATCH"

    Donnez nous la structure de votre table et ce que vous cherchez à faire, ce sera plus simple pour vous aider.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut
    ok donc voici le structure de ma table

    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
    CREATE TABLE BUDGET_COPI
    (
      DP_COPI            VARCHAR2(6 BYTE)           NOT NULL,
      ANNEE              NUMBER(4)                  NOT NULL,
      DATE_COPI          DATE                       NOT NULL,
      METIER             VARCHAR2(3 BYTE)           NOT NULL,
      JH_COUTTOTAL       NUMBER(12,2),
      JH_ARBDEMANDES     NUMBER(12,2),
      JH_ARBDECIDES      NUMBER(12,2),
      JH_CANTDEMANDES    NUMBER(12,2),
      JH_CANTDECIDES     NUMBER(12,2),
      CODE_TYPE_DEMANDE  NUMBER(2),
      CODE_FOUR_COPI     NUMBER(2),
      JH_PREVIDECIDE     NUMBER(12,2),
      CATEGORIE_DEPENSE  CHAR(1 BYTE)
    )
     
    ALTER TABLE BUDGET_COPI ADD (
      CONSTRAINT BUDGET_COPI_PK
     PRIMARY KEY
     (DP_COPI, ANNEE, DATE_COPI, METIER, CODE_FOUR_COPI, CODE_TYPE_DEMANDE));
    en fait je souhaite mettre à jour une ligne de cette table et si jamais elle n'existe pas la creer

    j'espère que je suis clair cette fois ci

    Merci

  6. #6
    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
    Comme le faisait remarquer Snipah, si votre données n'existe pas vous n'avez rien dans votre select, et donc pas de "non-match".

    Comme vous cherchez des valeurs fixes, utilisez plutôt un select from dual :
    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
    MERGE INTO budget_copi b
    USING 
    (
      SELECT
        '05036A' as DP_COPI,
        2009 as ANNEE,
        to_date('12/07/2007', 'dd/mm/yyyy') as DATE_COPI,
        'ME' as METIER,
        3 as CODE_TYPE_DEMANDE,
        6 as CODE_FOUR_COPI
      FROM DUAL) tmp
    ON 
    (   tmp.DP_COPI = b.DP_COPI
    AND tmp.ANNEE = b.ANNEE
    AND tmp.DATE_COPI = b.DATE_COPI
    AND tmp.METIER = b.METIER
    AND tmp.CODE_TYPE_DEMANDE = b.CODE_TYPE_DEMANDE
    AND tmp.CODE_FOUR_COPI = b.CODE_FOUR_COPI
    )
    WHEN MATCHED THEN
    UPDATE SET
        b.JH_COUTTOTAL    = 1000, 
        b.JH_ARBDEMANDES  = 2000, 
        b.JH_ARBDECIDES   = 3000, 
        b.JH_CANTDEMANDES = 4000, 
        b.JH_CANTDECIDES  = 5000, 
        b.JH_PREVIDECIDE  = 6000
     
    WHEN NOT MATCHED THEN 
    INSERT (b.DP_COPI,b.ANNEE, b.DATE_COPI, b.METIER, b.CODE_TYPE_DEMANDE, 
            b.CODE_FOUR_COPI, b.JH_COUTTOTAL, b.JH_ARBDEMANDES, b.JH_ARBDECIDES,
            b.JH_CANTDEMANDES, b.JH_CANTDECIDES, b.JH_PREVIDECIDE)
    VALUES (
       tmp.DP_COPI, tmp.ANNEE, tmp.DATE_COPI, tmp.METIER, tmp.CODE_TYPE_DEMANDE,
       tmp.CODE_FOUR_COPI, 1000, 2000, 3000, 4000, 5000, 6000
           );

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut
    Merci bcq

    la requete marche à merveille

    vous m'aidez enormement du coup
    à bientot

    Antoine

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

Discussions similaires

  1. problème commande shell compilation auto
    Par ludovic85 dans le forum C#
    Réponses: 1
    Dernier message: 07/02/2007, 12h28
  2. la commande merge
    Par daliok dans le forum Oracle
    Réponses: 1
    Dernier message: 05/01/2007, 18h43
  3. Problème commandes shell-trop d'arguments
    Par SuperCed dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/12/2006, 12h57
  4. [10g] Commande MERGE
    Par DoRiane dans le forum Oracle
    Réponses: 3
    Dernier message: 04/08/2006, 17h57
  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