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 update sur plusieurs tables


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    Par défaut Problème update sur plusieurs tables
    Bonjour,

    J'ai un soucis sur un update conditionnel sous Oracle 9i.

    Voilà mon soucis.

    J'ai 2 tables. Table 1 et Table 2.

    Des informations de Table 2 doivent venir mettre à jour des champs de Table 1 en fonction de conditions.

    Les champs que je souhaite "manipuler" (c'est à dire devant être mis à jour ou servant de contrôle) sont les suivants :

    Pour Table1 (qui en fait possède 21 colonnes) :

    T1MTOC, T1FRAME, T1INVOICE, T1CUSTOMER

    Pour Table2 (qui ne possède que les 4 colonnes suivantes) :

    T2MTOC, T2FRAME, T2INVOICE, T2CUSTOMER

    Ma problématique :

    T1INVOICE et T1CUSTOMER doivent être mis à jour par les valeurs de T2INVOICE et T2CUSTOMER

    à condition que :

    T1MTOC = T2MTOC et T1FRAME = T2FRAME

    J'ai essayé le code suivant (qui fonctionne pour un autre update) mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    update TABLE1 B
    SET T1INVOICE=
    (select T2INVOICE from TABLE2 A where B.T1FRAME=A.T2FRAME AND A.T2MTOC=B.T1MTOC) 
    where exists (select 'oui' from TABLE2 
    where B.T1MTOC=A.T2MTOC 
    AND A.T2FRAME=B.T1FRAME);
     
    update TABLE1 B
    SET T1CUSTOMER=
    (select T2CUSTOMER from TABLE2 A where B.T1FRAME=A.T2FRAME AND A.T2MTOC=B.T1MTOC) 
    where exists (select 'oui' from TABLE2 
    where B.T1MTOC=A.T2MTOC 
    AND A.T2FRAME=B.T1FRAME);
    En gros j'ai plusieurs problème avec cet update dont le fait qu'il me supprime des lignes dans TABLE1....

    J'ai essayé dans tous les sens et je n'y arrive pas....

    Peut être un regard extérieur réussira à me mettre sur la voie ?

    Merci.

    @+

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Un update ne supprime pas de ligne, vous n'avez pas un trigger sur votre table ?

    Pour le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE TABLE1 B
       SET (B.T1INVOICE, B.T1CUSTOMER) = (SELECT A.T2INVOICE, A.T2CUSTOMER
                                            FROM TABLE2 A
                                           WHERE B.T1FRAME = A.T2FRAME
                                             AND B.T1MTOC  = A.T2MTOC) 
    WHERE EXISTS (SELECT NULL
                    FROM TABLE2 A
                   WHERE B.T1FRAME = A.T2FRAME
                     AND B.T1MTOC  = A.T2MTOC);

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Je vais tester ce code de suite.

    Pour la question sur le trigger désolé je ne sais pas répondre.

    Comment savoir ?

    Merci.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from user_objects
    where object_type = 'TRIGGER'

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from user_objects
    where object_type = 'TRIGGER'
    Merci.

    Pas de trigger.

    @+

Discussions similaires

  1. problème delete sur plusieurs tables
    Par soubre dans le forum Hibernate
    Réponses: 4
    Dernier message: 19/06/2008, 17h16
  2. [MS SQL]faire un UPDATE sur plusieurs tables en meme temps
    Par touille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 09h45
  3. UPDATE sur plusieurs tables ?
    Par Mos dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/04/2007, 08h37
  4. Update sur plusieurs tables
    Par yoyopi dans le forum DB2
    Réponses: 4
    Dernier message: 24/07/2006, 08h22
  5. update sur plusieurs tables
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/01/2006, 14h30

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