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 :

Est-ce Cela Peut Fonctionner Requetes Mise A Jour


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut Est-ce Cela Peut Fonctionner Requetes Mise A Jour
    Bonjour à tous et à toutes,

    J'ai essayé de résoudre mes questions sur des requêtes de mises à jour.
    Pouvez-vous me dire si cela peut fonctionner.

    Merci pour vos conseils.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Peux-tu donner un exemple du résultat que tu veux obtenir ?

    Voici le résultat que tu obtiens actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    MATERIAUX
    no_mat  code_mat
    1       A
    2       B
    3       C
     
    ENTREPOTS (avant MAJ)
    no_ent no_mat
    1      1
    1      2
    2      1
    2      2
    2      3
     
    ENTREPOTS (aprest MAJ)
    no_ent no_mat memo
    1      1      5
    1      2      5
    2      1      5
    2      2      5
    2      3      5
    Je ne pense pas que ce soit ce que tu veux

  3. #3
    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
    Bonjour,

    je vois que vous avez avancé depuis cette discussion là mais pourquoi écrivez-vous dans votre document word et pas sur le forum ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Je cherche à obtenir que la colonne memo de type varchar2(65), contienne le nombre d'entrepôts par matériaux .

    Citation Envoyé par plaineR
    Peux-tu donner un exemple du résultat que tu veux obtenir ?

    Voici le résultat que tu obtiens actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    MATERIAUX
    no_mat  code_mat
    1       A
    2       B
    3       C
     
    ENTREPOTS (avant MAJ)
    no_ent no_mat
    1      1
    1      2
    2      1
    2      2
    2      3
     
    ENTREPOTS (aprest MAJ)
    no_ent no_mat memo
    1      1      5
    1      2      5
    2      1      5
    2      2      5
    2      3      5
    Je ne pense pas que ce soit ce que tu veux

  5. #5
    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
    Citation Envoyé par dauphin34000
    Je cherche à obtenir que la colonne memo de type varchar2(65), contienne le nombre d'entrepôts par matériaux .
    Donc vous voulez par exemple que le champ mémo de la 1ere ligne, qui concerne le matériau 1 dans l'entrepot 1 contienne le chiffre 2 puisqu'il y a 2 entrepots qui contiennent du matériau 1 ?

    Et que la dernière ligne, qui concerne le matériau 3 dans l'entrepot 2 contienne le chiffre 1 puisque l'entrepot 2 est le seul à possèder du matériau 3 ?

    Moi j'aurai mis cette information dans la table matériau plutôt... Car l'information va se répeter pour chaque ligne du même matériau pour des entrepots différents.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Cela devrait mettre dans la colonne memo le nombre de stages et la matière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Avec un autre exemple :
     
    J'ai une table stages
    elle contient : no_stage number(38)
                       code_stage varchar2(6)
                       memo varchar2(65)
                       mat_no_matiere number(38)
     
    et une table matieres
    elle contient : no_matiere number(38)
                        code_mat varchar2(3)
                        libel_mat varchar2(240)
     
    Les questions :
    1 - Je dois valoriser la colonne memo de la table "stages",
     avec le nombre de stages de la matière.
    2 - Je dois améliorer la requête précédente : 
    En rajoutant le code matière. Avec la fonction concat  
     
    Pour la question 1 si on fait :
    update stages
    set memo=(select count(no_stage)
    from matieres m, stages st
    where m.no_matiere=st.mat_no_matiere); 
     
    cela fonctionne mais la colonne memo contient
    le même chiffre pour tous,
    je pense que ce n'est pas normal ? 
     
    Pour la question 2 si on fait :
     
    update stages
    set memo=(select concat(count(st.no_stage),m.code_mat)
    from matieres m, stages st
    where m.no_matiere=st.mat_no_matiere);
     
    Oracle m'indique : ORA-00937: la fonction de groupe ne porte pas sur un groupe simple

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    1. Tu ne fais l'update d'une seule colonne tu en mets 2 dans ton select

    2. Quand tu utilises une fonction d'aggrégation, tu es obligé de faire un group by sur les colonnes qui ne sont pas "aggréguées"
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select col1, count(*)
    from matable
    group by col1;
    3. Comme tu as un = ton select doit ne ramener qu'une seule ligne.

    Bref, il y a encore du travail pour que ta requête fonctionne.
    => Commence par écrire le select tel que tu veux le résultat.

    Enfin es-tu sûr que ta colonne memo est dans la table stages, il m'aurait paru plus logique qu'elle soit dans la table matières.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    On ne fait pas de débogage sur le forum... je pense que tu as suffisamment d'élément maintenant... merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Je vais essayer, j'ai vérifié la colonne memo se trouve dans la table stages

    Citation Envoyé par plaineR
    1. Tu ne fais l'update d'une seule colonne tu en mets 2 dans ton select

    2. Quand tu utilises une fonction d'aggrégation, tu es obligé de faire un group by sur les colonnes qui ne sont pas "aggréguées"
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select col1, count(*)
    from matable
    group by col1;
    3. Comme tu as un = ton select doit ne ramener qu'une seule ligne.

    Bref, il y a encore du travail pour que ta requête fonctionne.
    => Commence par écrire le select tel que tu veux le résultat.

    Enfin es-tu sûr que ta colonne memo est dans la table stages, il m'aurait paru plus logique qu'elle soit dans la table matières.

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    C'est bien le nombre de stages par matière que tu veux ? et non le nombre de matières par stage ?

    Si c'est le nombre de stages par matière, ton modèle de données est assez moyen, car il va y avoir redondance de l'information

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Je cherche à trouver combien de stages existent par matières

    exemple : 3 stages "bureautique", 5 stages "français"

    Je n'y arrive toujours pas, je suis un "idiot"


    Citation Envoyé par plaineR
    C'est bien le nombre de stages par matière que tu veux ? et non le nombre de matières par stage ?

    Si c'est le nombre de stages par matière, ton modèle de données est assez moyen, car il va y avoir redondance de l'information

  12. #12
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    En admettant que tu aies les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NO_STAGE CODE_S MAT_NO_MATIERE
    -------- ------ --------------
           1 A                   1
           2 B                   1
           3 C                   1
           4 D                   2
           5 E                   2
    Pour savoir combien de stages il y a pour la matière 1, tu écrirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(*)
    from stages
    where MAT_NO_MATIERE = 1;
    Maintenant ce que tu veux savoir c'est combien il y a de stages pour la matière de la ligne que tu es entrain de mettre à jour, c'est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update stages s1
    set memo = (select count (*)
                 from stages s2
                 where s2.mat_no_matiere = s1.mat_no_matiere);
    As-tu compris le principe ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Oui, avec vous j'ai bien compris, le principe, mais comment faire pour éviter de faire un where =mat_no_matiere=1, la requête ne peut pas compter le nombre des matieres par stages automatiquement, c'est-à-dire compter le nombre des matieres (francais, histoire etc) et afficher 2 stages francais, 3 stages histoires.

    Merci pour votre aide "professeur".


    Citation Envoyé par plaineR
    En admettant que tu aies les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NO_STAGE CODE_S MAT_NO_MATIERE
    -------- ------ --------------
           1 A                   1
           2 B                   1
           3 C                   1
           4 D                   2
           5 E                   2
    Pour savoir combien de stages il y a pour la matière 1, tu écrirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(*)
    from stages
    where MAT_NO_MATIERE = 1;
    Maintenant ce que tu veux savoir c'est combien il y a de stages pour la matière de la ligne que tu es entrain de mettre à jour, c'est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update stages s1
    set memo = (select count (*)
                 from stages s2
                 where s2.mat_no_matiere = s1.mat_no_matiere);
    As-tu compris le principe ?

  14. #14
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Regarde l'update que je t'ai donné, c'est ce qu'il fait. J'ai remplacé le "=1" par "= la matière de la ligne que je vais updater".

  15. #15
    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
    Ca ressemble vachement à un exercice de cours...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    ça ressemble surtout à quelqu'un qu'à pas envie de se fouler

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Non, quelqu'un qui débute et qui trouve des gens sympas et compétents pour apprendre.

    Citation Envoyé par Fred_D
    ça ressemble surtout à quelqu'un qu'à pas envie de se fouler

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    OK, mais essaye d'avoir un peu plus d'initialive, sur le site il y a des tutoriels pour apprendre le SQL et la modélisation, commence déjà par ça.

    Après on se fera un plaisir de combler les manques de ces tutoriels ou t'expliquer les points qui tu ne saisis pas

    Faire ton travail, ce n'est pas t'aider à apprendre

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Je suis d'accord avec vous, je travaille les tutos du site je trouve que votre site est formidable, mais lorsque l'on apprend seul, des fois on ne comprend pas tout et surtout des fois on peut bloquer. Si j'avais votre savoir je pourrais dormir tranquille, mais je suis un véritable débutant. Donc je vous remercie pour votre compréhension Monsieur.

    Citation Envoyé par Fred_D
    OK, mais essaye d'avoir un peu plus d'initialive, sur le site il y a des tutoriels pour apprendre le SQL et la modélisation, commence déjà par ça.

    Après on se fera un plaisir de combler les manques de ces tutoriels ou t'expliquer les points qui tu ne saisis pas

    Faire ton travail, ce n'est pas t'aider à apprendre

  20. #20
    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
    J'ai reproduit l'exemple des stages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    CREATE TABLE STAGE (no_stage number(38),
                       code_stage varchar2(6),
                       memo varchar2(65),
                       mat_no_matiere number(38));
     
    CREATE TABLE MATIERE (no_matiere number(38),
                        code_mat varchar2(3),
                        libel_mat varchar2(240));
     
    INSERT INTO MATIERE VALUES (1,'FR1','Français niv1');
    INSERT INTO MATIERE VALUES (2,'AN1','Anglais niv1');
    INSERT INTO MATIERE VALUES (3,'AL1','Allemand niv1');
    INSERT INTO MATIERE VALUES (4,'FR2','Francais niv2');
    INSERT INTO MATIERE VALUES (5,'AN2','Anglais niv2');
    INSERT INTO MATIERE VALUES (6,'AL2','Allemand niv2');
    INSERT INTO MATIERE VALUES (7,'MA1','Mathematiques niv1');
    INSERT INTO MATIERE VALUES (8,'MA2','Mathematiques niv2');
    INSERT INTO MATIERE VALUES (9,'MA3','Mathematiques niv3');
     
     
    INSERT INTO STAGE VALUES (1,'STL1','',1);
    INSERT INTO STAGE VALUES (2,'STL2','',1);
    INSERT INTO STAGE VALUES (3,'STL3','',1);
    INSERT INTO STAGE VALUES (4,'STL4','',2);
    INSERT INTO STAGE VALUES (5,'STL5','',2);
    INSERT INTO STAGE VALUES (6,'STL6','',3);
    INSERT INTO STAGE VALUES (7,'STL7','',3);
    INSERT INTO STAGE VALUES (8,'STL8','',4);
    INSERT INTO STAGE VALUES (9,'STL9','',4);
    INSERT INTO STAGE VALUES (10,'STL10','',5);
    INSERT INTO STAGE VALUES (11,'STL10','',6);
    INSERT INTO STAGE VALUES (12,'STL12','',7);
    INSERT INTO STAGE VALUES (13,'STL13','',8);
    INSERT INTO STAGE VALUES (14,'STL14','',9);
    Ce qui nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    select * from stage
    NO_STAGE|CODE_STAGE|MEMO|MAT_NO_MATIERE
    1|STL1||1
    2|STL2||1
    3|STL3||1
    4|STL4||2
    5|STL5||2
    6|STL6||3
    7|STL7||3
    8|STL8||4
    9|STL9||4
    10|STL10||5
    11|STL10||6
    12|STL12||7
    13|STL13||8
    14|STL14||9
    Et ce que vous voulez obtenir c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    NO_STAGE|CODE_STAGE|MEMO|MAT_NO_MATIERE
    1|STL1|Nombre de stages proposant cette matieres : 3|1
    2|STL2|Nombre de stages proposant cette matieres : 3|1
    3|STL3|Nombre de stages proposant cette matieres : 3|1
    4|STL4|Nombre de stages proposant cette matieres : 2|2
    5|STL5|Nombre de stages proposant cette matieres : 2|2
    6|STL6|Nombre de stages proposant cette matieres : 2|3
    7|STL7|Nombre de stages proposant cette matieres : 2|3
    8|STL8|Nombre de stages proposant cette matieres : 2|4
    9|STL9|Nombre de stages proposant cette matieres : 2|4
    10|STL10|Nombre de stages proposant cette matieres : 1|5
    11|STL10|Nombre de stages proposant cette matieres : 1|6
    12|STL12|Nombre de stages proposant cette matieres : 1|7
    13|STL13|Nombre de stages proposant cette matieres : 1|8
    14|STL14|Nombre de stages proposant cette matieres : 1|9
    C'est à dire que les stages indiquent dans leur mémo le nombre de stage proposant la même matière ?
    On remarquera que pour cet exemple je n'ai considéré que des stages mono-matière, c'est normal où il y en a des multi-matières ?

    EDIT :
    je viens de tester sur des stages multi matières ça marche aussi.

Discussions similaires

  1. Decrémenter un champ dans requete mise a jour
    Par scrat57000 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 20/07/2007, 14h31
  2. pb requete mise a jour entre 2 tables
    Par lolothom dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 08/07/2007, 18h29
  3. Requete Mise A Jour UPDATE
    Par Teddy63 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/05/2007, 10h15
  4. [Requete]Mise a jour d'un champ
    Par le_gueux90 dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 11/05/2007, 12h52
  5. Probleme avec une requete mise a jour
    Par mael94420 dans le forum ASP
    Réponses: 2
    Dernier message: 08/03/2006, 21h56

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