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

Langage SQL Discussion :

PB Requête update


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Points : 10
    Points
    10
    Par défaut PB Requête update
    J'ai un PB avec ma requête oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    J'ai 2 tables :
     
    table JOURNAL              
    id_journal
    id_trace
    etat
    date_edi
    date_emi
     
    table TRACE
    id_trace
    etat
    date_trace
    Je veux : faire un update afin de mettre à jour les champs : etat et date_emi de la table journal avec les champs etat et date_trace de la table trace si journal.id_trace = trace.id_trace.

    j'ai lu les tutorials pour les jointures, mais j'avoue, je galère ... alors merci d'avance !

    je suis sous oracle.

    cassi

  2. #2
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    1ere syntaxe, je ne sais pas si elle est supportée par ORACLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Update JOU
    Set JOU.date_emi=TR.date_trace ,
          JOU.etat=TR.etat
    from JOURNAL JOU,TRACE TR
    WHRE JOU.id_trace=TR.id_trace
    sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Update JOURNAL
    Set date_emi=(SELECT date_trace FROM TRACE
                            WHRE JOURNAL.id_trace=TRACE.id_trace),
          etat=         (SELECT etat FROM TRACE
                           WHRE JOURNAL.id_trace=TRACE.id_trace)

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    est-il possible de faire une chose de ce style ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Update JOURNAL JOU
    Set (JOU.date_emi, JOU.etat)
    = (SELECT date_trace , etat )
        from JOURNAL JOU,TRACE TR 
        WHERE JOU.id_trace=TR.id_trace
    merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Points : 10
    Points
    10
    Par défaut oups
    j'ai oublié de dire que le code 1 ne fonctionne pas et pour le code 2, je pense que c'est "couteux" d'avoir de select non ?

    cassi

  5. #5
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Tu ne peux faire d'UPDATE sur 2 champs à la fois il faut donc bien passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE ma_table
    SET var1=..., var2=...
    WHERE ...
    La 2nde solution de MAMMAR est donc le + adaptée.

    Le coût des 2 select n'est pas bien grand, surtout si tes tables sont bien indexées

  6. #6
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    J'ai decouvert ceci comme syntaxe que je n'ai pas testé bien sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MERGE INTO JOURNAL 
       USING TRACE 
       ON ( JOIURNAL.Id_Trace=Trace.Id_Trace) 
    WHEN MATCHED THEN 
    UPDATE 
    SET date_emi=TR.date_trace , 
          etat=TR.etat
    Je pense que le forum Oracle te sera d'une plus grande utilité.

    A+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Alors, sur le tutorial, j'ai trouvé :

    UPDATE T_PROSPECT
    SET PRP_NOM = TRIM(RIGHT, PRP_NOM) || ' bis'
    WHERE PRP_ID = (SELECT PRP_ID
    FROM T_PROSPECT P
    JOIN T_CLIENT C
    ON C.CLI_NOM = P.PRP_NOM
    AND C.CLI_PRENOM = P.PRP_PRENOM)
    Est-ce que je pourrais faire un truc de ce genre ?

    cassi

  8. #8
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Dans ta solution cassi tu ne mets à jour toujours qu'un seul champ (PRP_NOM), il n'y a rien de nouveau donc dans cette formulation.

    Regardes de près la solution MERGE INTO, je ne connais pas mais ça me semble prometteur...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    j'ai essayé le merge mais il y a une erreur sur la dernière ligne, dernier caractère :

    mot clé absent !


    je vais chercher sur le net s'il n'y a pas une autre syntaxe pour oracle !


    cassi

  10. #10
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    En me replongeant il semblerait que tu pourrais tout de même faire de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Update JOURNAL JOU 
    Set (JOU.date_emi, JOU.etat) 
    = (SELECT date_trace , etat  
        from TRACE TR 
        WHERE JOU.id_trace=TR.id_trace )
    Apparemment cela devrait fonctionner...

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

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. requête UPDATE [débutant]
    Par Oega dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/07/2005, 23h27
  3. Ma requète update est elle conforme ?
    Par CBTech dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 24/05/2005, 21h25
  4. [VB.NET] [ODBC] Pb requête UPDATE avec clé primaire..?
    Par Pleymo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/03/2005, 18h46
  5. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 08h16

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