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

Oracle Discussion :

[Oracle 9.2.] Problème requete "update"


Sujet :

Oracle

  1. #21
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Ben moi j'ai toujours pas compris ce que tu voulais faire (à part utiliser absolument des curseurs).

    Fonctionnellement, cette requête là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT table2.champ1, table2.champ2 
            FROM table2, ma_table
            WHERE ma_table.champ2 = table2.champ2 
            AND table2.champ3 = 821;
    te ramène plusieurs valeurs de champ1 et champ2, et tu aimerais mettre à jour CHAQUE ligne de ma_table, en insérant dans ma_table.champ1 la valeur de table2.champ1 quand ma_table.champ2=table2.champ2 ?

    Bref, Vincent D a déjà donné la réponse à mon avis. Que donne cette requête ? (copier coller de Vincent D)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update ma_table 
       set ma_table.champ1 = (
           select table2.champ1
             from table2
            where table2.champ2 = ma_table.champ2
              and table2.champ3 = 821 )
    Si cette requête pose un problème ça veut alors dire que tu n'as pas une valeur unique de table2.champ1 pour chaque table2.champ2, et que donc le modèle ne va pas, ou qu'il faudra faire un choix.

    Mais à mon avis c'est ce que tu cherchais.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  2. #22
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut petite remarque...
    Attention à la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    update ma_table 
       set ma_table.champ1 = (
           select table2.champ1
             from table2
            where table2.champ2 = ma_table.champ2
              and table2.champ3 = 821 )
    Elle porte sur l'ensemble de la table "ma_table". Est-ce que c'est bien ce que tu veux ou est-ce que tu ne veux modifier qu'une seule ligne à chaque fois ? Dans ce dernier cas, il faut rajouter une clause where portant sur ma_table apres la parenthèse du set.

  3. #23
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Je pense en fait que je ne prends pas les bonnes données pour arriver a exécuter correctement ma requête.

    Je vais tout reprendre depuis le début.

  4. #24
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Aussi bien en nous expliquant...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  5. #25
    Membre confirmé

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2006
    Messages : 224
    Points : 467
    Points
    467
    Par défaut
    update ma_table
    set ma_table.champ1 in
    (select table2.champ1
    from table2
    where ma_table.champ2 = table2.champ2
    and table2.champ3 = 821 )

    remplace le = par in si tu veux updater tous les champs rammenés par ta sous requête.

    Le signe = n'accèpte qu'un seul paramètre.

  6. #26
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 811
    Points
    30 811
    Par défaut
    Citation Envoyé par brunolf
    update ma_table
    set ma_table.champ1 in
    (select table2.champ1
    from table2
    where ma_table.champ2 = table2.champ2
    and table2.champ3 = 821 )

    remplace le = par in si tu veux updater tous les champs rammenés par ta sous requête.

    Le signe = n'accèpte qu'un seul paramètre.
    on sera gentil, on n'ajoutera pas au bêtisier
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #27
    Membre confirmé

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2006
    Messages : 224
    Points : 467
    Points
    467
    Par défaut
    toutes mes excuses ... j'ai pas fait gaffe .... pour une fois que je faisais l'effort de répondre, c'est raté

  8. #28
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    pense aux balises code la prochaine fois surtout

  9. #29
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    lol, je venais de me dire
    Waouuuuuh, ça marche ça ??
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  10. #30
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Pour poursuivre l'idée (en priant pour ne pas rentrer dans le betisier ), je verrais bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    update ma_table 
       set ma_table.champ1 = (
           select table2.champ1
             from table2
            where table2.champ2 = ma_table.champ2
              and table2.champ3 = 821 )
      where champ2 in
        ( select table2.champ2
          from table2
          where 
          table2.champ3 = 821 )
    Ou bien (préférable)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    update ma_table 
       set ma_table.champ1 = (
           select table2.champ1
             from table2
            where table2.champ2 = ma_table.champ2
              and table2.champ3 = 821 )
      where exists 
        ( select 1 
          from table2
          where table2.champ2 = ma_table.champ2
              and table2.champ3 = 821 )

  11. #31
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    J'ai toujours trop de valeurs retrounées par la sous requête du champs de mise a jour....


    J'y comprends plus rien

  12. #32
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    que donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from (select count(*) nb,table2.champ2
             from table2
            where table2.champ3 = 821
    group by champ2) where nb > 1

  13. #33
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Beaucoup de résultats, j'ai 55 lignes avec le count entre 2 et 600 suivant les lignes....

  14. #34
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    tu as la cause de ton erreur

  15. #35
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    je comprends bien mais comment je fais pour faire ma mise a jour???
    Il n'y a pas de solutions????

    Je suis vraiment désoléee mais je suis complètement perdue...

  16. #36
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    DISTINCT éventuellement... sinon... bah j'vois pas comment tu peux mettre 600 valeurs dans une seule colonne

  17. #37
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    J'ai déja mis le distinct.

    Bon je crois que je vais encore essayer de tout reprendre calmement....

  18. #38
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    il te manque une condition qui permet de déterminer très exactement LA valeur à mettre à jour

  19. #39
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    C'était pour ca que je voulais passer par des curseurs, je pensais que comme ca j'aurais l'élément manquant mais ce n'est pas plus concluant.

  20. #40
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    je crois effectivement qu'il faut que tu réfléchisse fonctionnellement à ton problème. Là tu es en train d'essayer de faire rentrer 600 valeurs dans une seule... si c'est 600 mêmes valeurs de "champ1", tu pourras t'en tirer avec un distinct, mais si ces valeurs sont diverses, comment veux tu qu'oracle devine laquelle choisir ? ( oracle oui, devin non )

    Je te conseille de prendre une des lignes qui ramène plusieurs valeurs disctinctes de la requête de Fred_D, et de réfléchir sur ce cas précis à ce que tu voudrais voir updaté dans ta table ma_table

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [Oracle] Probleme dans l'exécution de requetes
    Par Floverdoz dans le forum Bases de données
    Réponses: 10
    Dernier message: 14/06/2005, 18h03
  2. [sgbd] [Oracle] Pb d'execution d'une requete
    Par linou dans le forum SGBD
    Réponses: 5
    Dernier message: 15/03/2005, 17h01
  3. oracle 8.1.7, CLOB et requete avec like
    Par fsapet dans le forum Oracle
    Réponses: 5
    Dernier message: 15/02/2005, 11h45

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