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

PL/SQL Oracle Discussion :

un update d'une table à partir d'une autre


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut un update d'une table à partir d'une autre
    bonsoir
    j'ai une table article qui contient une colone (art_profil)
    elle contient actualement les libelles des profils
    j'aimerai faire des update dans cette colone pour insérer les identifiant des profils
    que je vais ramner depuis la table profils qu'elle a comme colone (id_profil,art_profil)
    donc pour chaque enregistement de la table article je vais faire un
    select dans la table profil pour ramner le id_profil du art_profil

    pour vous éclairer voila ce que j'ai dans la table article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Libelle _prof  :      
    Prof1
    Prof2
    Prof3
    et la table profil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    et la table profil
    id_profil     art_profil       
    id_prof1      Prof1
    id_prof2      Prof2
    id_prof2      Prof3
    et voila ce que j'aimerai avoir dans la table article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Libelle _prof  :           
    id_prof1    
    id_prof2      
    id_prof2
    j'éspère etre clair
    merci de me répondre

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    si j'ai bien compris normalement tu peux faire ca en une requete
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update article a 
    set a.ART_PROFIL= (select ID_PROFILE
                                      from profile p 
                                            where p.ART_PROFIL= a.ART_PROFIL);

  3. #3
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    je l'ai essayé deja et ça me donne l'erreur suivante
    sous interogation ramenant un enregistrement plus d'une ligne

    puisque la requete suivante:
    ramene plusieurs lignes qu'on va insérer dans une seule colone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (SELECT ID_PROFILE
     FROM profile p 
    WHERE p.ART_PROFIL= a.ART_PROFIL)
    je crois qu'il manque qlq chose !!

  4. #4
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Points : 146
    Points
    146
    Par défaut
    ça signifie que tu as des articles différents (ID_PROFIL different) avec des libellés identique (ART_PROFIL différent).

    Teste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ART_PROFILE, COUNT(1)
    FROM PROFILE
    GROUP BY ART_PROFILE;
    Sylvain
    Sylvain


  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    non puisque la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (SELECT ID_PROFILE
                                      FROM profile p 
                                            WHERE p.ART_PROFIL= a.ART_PROFIL);
    va parcourir "article " un par un et ramène le id corespondent à "ART_PROFIL"
    c'est pour ça qu'il y'a plusieurs resultat et lors de l'update
    d'une colone il trouve toutes une list

    je crois qu'il faut ajouter une condition where pour l'update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE article a 
    SET a.ART_PROFIL= (SELECT ID_PROFILEFROM profile p WHERE p.ART_PROFIL= a.ART_PROFIL)
     
    where .............

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Bonjour.
    Relisez ce qu'a écrit Sylvain, c'est la seule explication.

  7. #7
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Ta table ressembles a ca

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     select * from profil;
     
    ID_PROFIL  ART_PROFIL
    ---------- ----------
    id_prof3   Prof2
    id_prof3   Prof3
    id_prof3   Prof1
    id_prof1   Prof1
    id_prof2   Prof2

    et quand on lance l'update

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     UPDATE libelle_prof a
      2  SET a.id_prof= (SELECT distinct ID_PROFIL
      3                                    FROM profil p
      4                                         WHERE p.ART_PROFIL= a.ID_PROF)
      5  where exists (select 1 from profil p where a.id_prof=p.art_profil)
      6  /
    SET a.id_prof= (SELECT distinct ID_PROFIL
                    *
    ERROR at line 2:
    ORA-01427: single-row subquery returns more than one row

    Maintenant si tu ne veux ecouter personne

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2012, 12h12
  2. SQL Update d'une table à partir d'une autre table
    Par Jean-Marc68 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 16/03/2007, 13h22
  3. [D7],[Access], update d'une table à partir d'une autre
    Par iam dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/11/2006, 18h14
  4. Update d'une table à partir d'une autre
    Par nicoaix dans le forum Access
    Réponses: 5
    Dernier message: 09/03/2006, 11h36
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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