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 :

probleme avec merge


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut probleme avec merge
    j'ai un problème avec merge
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MERGE INTO t_rejets a
          USING T_RAYONS b
           ON (    a.em_key = b.fam
              AND a.em_version = b.rayon
    		  )
           WHEN MATCHED THEN
    	   UPDATE
    	   SET EM_KEY='newUP'
     
    	  WHEN NOT MATCHED THEN
    	  INSERT(EM_KEY) VALUES('newIN');
    j'obtiens ce qui suit:
    ORA-00904: "A.EM_KEY": invalid identifier
    j'ai lu quelque part que merge (cette syntaxe ci en tout cas) à fait son apparition depuis la version 9i d'oracle.
    je suis presque certain que je travaille sur une 9i.
    au quel cas ou il s'avererai que je travaille sur une version anterieur pourais-je avoir en plus de ma reponse la "vieille" syntaxe de merge svp ?
    merci pour toutes vos contributions

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    salut
    Essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    begin 
     
    insert ..
     
    exception 
    when dup_val_on_index then 
    update ...
     
    end ;
    /

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    dieu sait si on m'a donné le choix au depart, là chui parti sur mon merge...

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MERGE INTO t_rejets a
          USING T_RAYONS b
           ON (    a.em_key = b.fam
              AND a.em_version = b.rayon
    		  )
           WHEN MATCHED THEN
    	   UPDATE
    	   SET EM_KEY='newUP'
    	  WHEN NOT MATCHED THEN
    	  INSERT(EM_KEY) VALUES('newIN');
    la syntaxe est correcte. Es-tu sûr d'avoir EM_KEY dans t_rejets?

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    en fait il est illegal de faire un update de la clé du join.

    Logiquement tu aurais du obtenir

    ORA-38104: Columns referenced in the ON Clause cannot be updated

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    la syntaxe est correcte. Es-tu sûr d'avoir EM_KEY dans t_rejets?
    certain est ce que ça marche chez toi laurent ?

    en fait il est illegal de faire un update de la clé du join.

    Logiquement tu aurais du obtenir

    ORA-38104: Columns referenced in the ON Clause cannot be updated
    bah c'est pas le cas chez moi je travaille sous toad...je sais que ça n'a rien a voir mais sait-on jamais, et pis remarque bien que c'est le "A.EM_KEY" (la jointure) qui lui pose problème et non pas le "EM_KEY" dans l'UPDATE

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    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
     
    SQL> create table t_rejets(em_key varchar2(10), em_version varchar2(10), x varchar2(10));
     
    Table created.
     
    SQL> create table t_rayons(fam varchar2(10), rayon varchar2(10));
     
    Table created.
     
    SQL> MERGE INTO t_rejets a
      2        USING T_RAYONS b
      3         ON (    a.em_key = b.fam
      4            AND a.em_version = b.rayon
      5                    )
      6         WHEN MATCHED THEN
      7             UPDATE
      8             SET EM_KEY='newUP'
      9            WHEN NOT MATCHED THEN
     10            INSERT(EM_KEY) VALUES('newIN');
           ON (    a.em_key = b.fam
                   *
    ERROR at line 3:
    ORA-38104: Columns referenced in the ON Clause cannot be updated: "A"."EM_KEY"
     
     
    SQL> MERGE INTO t_rejets a
      2        USING T_RAYONS b
      3         ON (    a.em_key = b.fam
      4            AND a.em_version = b.rayon
      5                    )
      6         WHEN MATCHED THEN
      7             UPDATE
      8             SET x='newUP'
      9            WHEN NOT MATCHED THEN
     10            INSERT(EM_KEY) VALUES('newIN');
     
    0 rows merged.
    pareil avec Toad 8

Discussions similaires

  1. Probleme insert avec merge
    Par flokent7 dans le forum Oracle
    Réponses: 4
    Dernier message: 20/07/2012, 10h51
  2. [SSIS] [2K5] probleme avec Merge Join
    Par aqavach dans le forum SSIS
    Réponses: 1
    Dernier message: 10/06/2009, 10h36
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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