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 :

UPDATE sur une autre table


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 26
    Points : 20
    Points
    20
    Par défaut UPDATE sur une autre table
    Bonjour, jaimerais mettre a jour ma table a partir d,une autre lorsque seulement la valeur est differente (date).
    pour cela jutilise cette syntaxe .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE table1 SET table1.date = (SELECT table2.date from table2 
    WHERE table1.NUM_SERIE = table2.NUM_SERIE AND table1.date <> table2.date)
    malheureusement cette requete me met en erreur :

    ORA-01407: impossible de mettre à jour ("table1"."date") avec NULL

    ps: jai un peu de mal avec la syntaxe update d'oracle. merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Je pense que ta syntaxe est bonne.
    S'il te renvoit NULL, c'est qu'il doit y avoir des lignes de t1 pour lesquelles il ne trouve aucune correspondance dans t2.
    A mon avis, ça vient de ta clause 'AND table1.date <> table2.date', censée ne pas mettre à jour si la date est la même : le UPDATE ne peut donc pas traiter ces enregistrements car il a du NULL en face. Essaye de supprimer cette clause, comme ça il y aura une valeur renvoyée dans la sous-requête. La table t1 sera mise à jour, certes, mais par la même valeur que sa valeur initiale, ce qui est transparent pour toi, mais permettra peut-être de résoudre le problème.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    non meme en supprimant le seconde clause, jai le droit a la meme erreur oracle.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Tu as sûrement des NUM_SERIE de t1 qui n'existent pas dans t2, ou s'ils existent, leur t2.date est à null alors que t1.date a la contrainte NOT NULL...
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tu mets à jour toute ta table sans condition.
    Donc pour les données identiques tu mets NULL (vu que le sous select ne ramène pas les données égales)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE table1 
    SET table1.DATE = (SELECT table2.DATE 
    					FROM table2 
    					WHERE table1.num_serie = table2.num_serie) 
    WHERE table1.DATE <> (SELECT table2.DATE 
    					FROM table2 
    					WHERE table1.num_serie = table2.num_serie)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/08/2014, 11h02
  2. UPDATE sur table en fonction d'une valeur sur une autre table
    Par jgjeremy01 dans le forum Requêtes
    Réponses: 7
    Dernier message: 03/12/2013, 23h41
  3. Baisse charge -> update sur une autre table.
    Par LeHibou2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/11/2012, 09h48
  4. Update avec un controle sur une autre table
    Par Calvein dans le forum Requêtes
    Réponses: 0
    Dernier message: 19/06/2009, 18h50
  5. pb d'insertion avec un SELECT sur une autre table
    Par epeichette dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 22h58

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