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

Langage SQL Discussion :

Sql fonction Nb


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 80
    Points : 46
    Points
    46
    Par défaut Sql fonction Nb
    Bonjour,

    j'ai un petit exercice qui me bloque si quelqu'un peut m'aider s'il vous plait, merci d'avance.

    donc j'ai 2 tables :

    la première table : Produit avec comme attributs

    - id : id du produit(clé primaire)

    - prix : prix du produit(Double)

    - description : description du produit(VarChar)

    la 2ème table : Composition (Un élément apparaissant dans la fabrication d'un produit )

    produitFabrique : entier Id du produit fabriqué

    produitComposant : entier Id du produit intervenant directement dans la fabrication

    numero: entier Numéro d'ordre du produit composant dans la liste des produits composants du produit fabriqué

    quantite: entier Quantité du produit composant intervenant dans la fabrication d'une unité du produit fabriqué

    (produitFabrique,produitComposant) -> clé primaire

    produitFabrique -> clé étrangere vers Produit(id)

    produitcomposant -> clé étrangère vers Produit(id)

    je dois écrire une fonction :

    retournant le nombre de produits qui interviennent dans la fabrication du produit dont l'id est donné en paramètre.
    Ce nombre doit reprendre tous les produits composants : ceux qui composent directement le produit + ceux qui composent les produits composants + ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    maFonction(id int) {
    select *
    from Composition
    produitFabrique = id
     
    }
    donc là je récupere tout les produit composant mon Produit maintenant pour chacun de ces produit je dois faire la même chose et là je bloque.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 284
    Points : 12 986
    Points
    12 986
    Par défaut
    Bonjour,
    Il te faut utiliser ici une requête récursive, puisqu'li te faut les composants, les composants des composants, etc...
    En espérant que ton SGBD (non spécifié) prenne en charge les requêtes récursives.
    Ensuite comme tu dois renvoyer le nombre de composants (et non la liste des composants) il faut un COUNT().
    Et comme il ne faut pas compter 2 fois un même composant, un COUNT(DISTINCT) est requis.

    Si ton SGBD ne supporte pas les requêtes récursives (MySQL ?), tu dois mettre la récursivité dans la procédure stockée. Mais il faudra gérer le cas d'un composant qui apparaît plusieurs fois, et les temps de traitements ne seront pas "tout à fait" les mêmes...

    Tatayo.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    merci de ta réponse, le sgbd que nous utilisons est oracle

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 378
    Points : 39 860
    Points
    39 860
    Billets dans le blog
    9
    Par défaut
    En ce cas vous pouvez mettre en oeuvre une requête récursive

    Il y a un tuto ici si besoin : http://sqlpro.developpez.com/cours/s...te-recursives/

Discussions similaires

  1. [AccessXP][SQL]Fonction NZ() et concaténation
    Par steelidol dans le forum Access
    Réponses: 3
    Dernier message: 08/10/2005, 19h27
  2. Réponses: 4
    Dernier message: 18/08/2005, 17h11
  3. Réponses: 5
    Dernier message: 13/07/2005, 11h03
  4. [PL/SQL] fonction et alter session
    Par aline dans le forum Oracle
    Réponses: 10
    Dernier message: 26/01/2005, 16h23
  5. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 10h43

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