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 :

commande merge oracle


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Points : 71
    Points
    71
    Par défaut commande merge oracle
    Bonjour,

    j'ai un problème avec la commande merge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    desc t_environnement;
     
    --- MISE A JOUR DE LA TABLE ENVIRONNEMENT ---
    merge into t_environnement X
    using ( select ENVIRONNEMENT,ID_DOMAINE from t_environnement_tmp ) T
    on ( X.ENVIRONNEMENT=T.ENVIRONNEMENT and X.ID_DOMAINE=T.ID_DOMAINE )
    when matched then update
    set X.ID_ENVIRONNEMENT=T.ID_ENVIRONNEMENT , X.ENVIRONNEMENT=T.ENVIRONNEMENT , X.ID_DOMAINE=T.ID_DOMAINE
    when not matched then
    insert ( X.ID_ENVIRONNEMENT,X.ENVIRONNEMENT,X.ID_DOMAINE,X.ID_ENVIRONNEMENT_ORA ) values ( T.ID_ENVIRONNEMENT,T.ENVIRONNEMENT,T.ID_DOMAINE,sequence_environne
    ment.NextVal);
    et voici le résultat :
    Name Null? Type
    ----------------------------------------- -------- ----------------------------
    ID_ENVIRONNEMENT_ORA NOT NULL NUMBER(6)
    ID_DOMAINE NUMBER(6)
    ID_ENVIRONNEMENT NOT NULL NUMBER(2)
    ENVIRONNEMENT VARCHAR2(16)

    insert ( X.ID_ENVIRONNEMENT,X.ENVIRONNEMENT,X.ID_DOMAINE,X.ID_ENVIRONNEMENT_ORA ) values ( T.ID_ENVIRONNEMENT,T.ENVIRONNEMENT,T.ID_DOMAINE,sequence_environnement.NextVal)
    *
    ERROR at line 7:
    ORA-00904: "T"."ID_ENVIRONNEMENT": invalid identifier

    j'avoue que je ne comprend pas le problème

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    effectivement ID_ENVIRONNEMENT n'est pas repris dans ton select

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Points : 71
    Points
    71
    Par défaut
    bonjour,

    j'ai corrigé mais maintenant j'ai cette erreur :
    [1439]pbytela@bt1ws0ba[/u01/app/e_sda/exploit/reference/sql]sqlplus -silent TOM/fraise @merge.sql
    Name Null? Type
    ----------------------------------------- -------- ----------------------------
    ID_ENVIRONNEMENT_ORA NOT NULL NUMBER(6)
    ID_DOMAINE NUMBER(6)
    ID_ENVIRONNEMENT NOT NULL NUMBER(2)
    ENVIRONNEMENT VARCHAR2(16)

    on ( X.ID_DOMAINE=T.ID_DOMAINE and X.ENVIRONNEMENT=T.ENVIRONNEMENT )
    *
    ERROR at line 3:
    ORA-00904: "X"."ENVIRONNEMENT": invalid identifier

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    envoie nous un DESC de tes tables

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Points : 71
    Points
    71
    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
     
    53 rows selected.
     
    desc T_ENVIRONNEMENT_TMP;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID_ENVIRONNEMENT                          NOT NULL NUMBER(2)
     ENVIRONNEMENT                                      VARCHAR2(16)
     ID_DOMAINE                                         NUMBER(1)
     
    desc T_ENVIRONNEMENT;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID_ENVIRONNEMENT_ORA                      NOT NULL NUMBER(6)
     ID_DOMAINE                                         NUMBER(6)
     ID_ENVIRONNEMENT                          NOT NULL NUMBER(2)
     ENVIRONNEMENT                                      VARCHAR2(16)

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    apparemment ce n'est pas le même ordre sql que celui montré précédemment : clause on inversée

    --> lance ta commande en sql*plus (pas de script pour pouvoir voir le sql véritablement lancé et montre nous le résultat)

    MERCI

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 68
    Points : 71
    Points
    71
    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
     
    SQL> merge into t_environnement X
      2  using ( select ENVIRONNEMENT,ID_DOMAINE,ID_ENVIRONNEMENT from t_environnement_tmp ) T
      3  on ( X.ID_DOMAINE=T.ID_DOMAINE and X.ENVIRONNEMENT=T.ENVIRONNEMENT )
      4  when matched then update
      5  set X.ID_ENVIRONNEMENT=T.ID_ENVIRONNEMENT , X.ENVIRONNEMENT=T.ENVIRONNEMENT , X.ID_DOMAINE=T.ID_DOMAINE
      6  when not matched then
      7  insert ( X.ID_ENVIRONNEMENT,X.ENVIRONNEMENT,X.ID_DOMAINE,X.ID_ENVIRONNEMENT_ORA ) values ( T.ID_ENVIRONNEMENT,T.ENVIRONNEMENT,T.ID_DOMAINE,sequence_environnement.NextVal);
    on ( X.ID_DOMAINE=T.ID_DOMAINE and X.ENVIRONNEMENT=T.ENVIRONNEMENT )
                                       *
    ERROR at line 3:
    ORA-00904: "X"."ENVIRONNEMENT": invalid identifier
     
     
    SQL>

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    ... bug 4630549

    MERGE SQL statements can fail with an unexpected ORA-904
    or a dump.

    Workaround:
    Remove indexes on source tables. (not generally practical)

    -> fixé dans le patchset 10.2.0.2 , ou en 11g :o)

Discussions similaires

  1. Commande MERGE sous ORACLE 9.2.0.6
    Par Cofondinde dans le forum Oracle
    Réponses: 5
    Dernier message: 19/07/2007, 19h42
  2. la commande merge
    Par daliok dans le forum Oracle
    Réponses: 1
    Dernier message: 05/01/2007, 18h43
  3. MERGE ORACLE 9i
    Par goozy dans le forum Oracle
    Réponses: 1
    Dernier message: 24/11/2006, 16h50
  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