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


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut update table sur plusieurs tables
    Bonjour, j'essaye de trouver un moyen dans oracle 8 pour faire un update qui ressemblerait à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE items,month SET items.price=month.price
    WHERE items.id=month.id;
    C'est possible de faire cela dans MySQL 5.0 mais visiblement Oracle 8 n'aime pas trop puisqu'il me dit "ORA-00971: missing SET keyword"

    J'imagine que ça doit être possible en définissant une procédure oracle, mais est-ce qu'il n'y aurait pas un moyen plus simple?

    merci d'avance.

    Pour info
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select * from v$version;
    BANNER
    ----------------------------------------------------------------
    Oracle8i Enterprise Edition Release 8.1.7.2.0 - 64bit Production
    PL/SQL Release 8.1.7.2.0 - Production
    CORE    8.1.7.0.0       Production
    TNS for Solaris: Version 8.1.7.2.0 - Production
    NLSRTL Version 3.4.1.0.0 - Production

  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
    Points : 1 197
    Points
    1 197
    Par défaut
    Bonjour ,

    Essaie ce code :

    UPDATE items SET items.price=( select month.price
    from month
    WHERE items.id=month.id);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Si je fais ça le select va me renvoyer plusieurs résultats. D'ailleurs je viens d'essayer et c'est effectivement ce qui se passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01427: single-row subquery returns more than one row

  4. #4
    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
    Points : 1 197
    Points
    1 197
    Par défaut
    Bonjour ,

    Tu peux me donner plus de renseignements sur les deux tables ?

    Qu'est ce que tu veux faire ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    En gros j'ai 2 tables, disons A et B.

    A contient entre autres les colonnes suivantes:

    ID (clé primaire)
    Nom

    B contient au départ, entre autres, la colonne suivante:

    RefA

    Où RefA est une reférence vers la clé primaire (ID) de A.

    Récement j'ai fait un changement dans le data Model, et je vais devoir avoir une référence vers la colonne "Nom" de A dans la table B.

    J'ai donc fait un alter table pour rajouter la colonne suivante dans B:

    RefNom

    Maintenant il faut que je joue un update SQL qui va remplir dans RefNom de toutes les instances de B, la valeur "Nom" du tuple de A qui correspond à l'identifiant RefA.

    Donc en gros je voudrais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE A, B SET B.RefNom=A.Nom WHERE B.RefA=A.ID;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 87
    Points : 79
    Points
    79
    Par défaut
    bonjour,
    je relis la requête de salim11 et elle me semble parfaitement juste :
    UPDATE items SET items.price=( select month.price from month WHERE items.id=month.id);
    ce qui pour moi justifie l'erreur que tu as eu, c'est que month.id n'est pas une clé primaire, et que tu as un doublon quelque part.
    j'ai cependant créer deux tables A et B de test:

    SQL> select * from A;

    ID NOM
    ---------- --------
    1 AAA
    2 BBB
    3 CCC
    4 DDD
    5 EEE

    SQL> select * from B;

    REFA REFNOM
    ---------- --------
    1
    1
    1
    1
    2
    2
    2
    2
    3
    3
    3
    3
    4
    4
    4
    5
    5
    5
    j'exécute la requête suivante, semblable à celle de salim11:SQL> update B
    SQL> update B set B.REFNOM = (select A.NOM from A WHERE A.ID=b.REFA);
    18 rows updated.
    et voila ce que j'obtient:
    SQL> select * from B;

    REFA REFNOM
    ---------- ----------------
    1 AAA
    1 AAA
    1 AAA
    1 AAA
    2 BBB
    2 BBB
    2 BBB
    2 BBB
    3 CCC
    3 CCC
    3 CCC
    3 CCC
    4 DDD
    4 DDD
    4 DDD
    5 EEE
    5 EEE
    5 EEE

    18 rows selected.
    est ce bien cela ce que tu voulais faire?
    vérifie juste que tu as un bien une clé primaire dans ta table A
    AEMAG

Discussions similaires

  1. Recherche sur plusieurs tables et plusieurs champs
    Par Touka_big_boss dans le forum SQL
    Réponses: 1
    Dernier message: 01/02/2011, 13h45
  2. Réponses: 2
    Dernier message: 18/11/2010, 10h07
  3. Réponses: 3
    Dernier message: 18/02/2010, 07h50
  4. requete pour diviser une table sur plusieurs tables
    Par futurist dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/09/2008, 22h51
  5. Réponses: 1
    Dernier message: 14/05/2007, 15h46

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