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 :

Requête multi-niveaux : arbre


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    OCTAL - ORACLE
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : OCTAL - ORACLE
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Requête multi-niveaux : arbre
    Bonjour,

    J'ai une 1ere table(nomenclature) et une dexieume table (ligne_cde_client)
    structure des tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nomenclature(NOME_ARTI_CODE_COMPOSE,NOME_ARTI_CODE_COMPOSANT, NOME_COEFFICIENT, NOME_PCT_REBUT , NOME_DEBUT_VALIDITE , NOME_FIN_VALIDITE....)
     
    ligne_cde_client( LCCL_ARTI_CODE, LCCL_QTE_COMMANDEE_UV, LCCL_DT_LIVRAISON_CONFIRMEE, lccl_fin_livraison, lccl_total_qte_livree_uv,lccl_total_qte_retournee_uv ...)
    1- un article produit fini (composé) peut se compose des composants et un composant peut etre un composé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    exemple: NOME_ARTI_CODE_COMPOSE,	NOME_ARTI_CODE_COMPOSANT, 	NOME_COEFFICIENT
    		PF01				C01				1
    		PF01				C02				2
    		C02				C01				2
    		C02				C03				3
    D'après l'exemple ci-dessus les composants C01, C02 et C03 sont des comosants du PF01.

    2- Mon problème, je vaux une requette qui me retourne le besoin d'un composant donné (:RES_ARTICLE)
    par rapport aux commandes en cours dans une periode donnée (01/2012).
    exemple si je donne le composant C01 elle me retourne 50 (supposons LCCL_QTE_COMMANDEE_UV = 10)
    si je donne le composant C03 elle me retourne 60 = 3*2*10 (supposons LCCL_QTE_COMMANDEE_UV = 10)

    J'ai essayé la requette ci-dessous, mais elle me retourne un résultat sauf dans le cas ou le composant est dans le premier niveau,
    comment je dois faire si le composant dans un niveau supperiure à 1.
    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
    function CF_QTE_CDE_M1 return Number is
    V_besoin_cde number;
    begin
      SELECT       sum(((nvl(LCCl_QTE_COMMANDEE_UV,0) - NVL (lccl_total_qte_livree_uv, 0)) * nome_coefficient) * (1 + nome_pct_rebut/100))
                   INTO V_besoin_cde
             FROM nomenclature, ligne_cde_client
            WHERE nome_debut_validite <= trunc(sysdate)
              AND NVL (nome_fin_validite, trunc(sysdate)) >= trunc(sysdate)
              and nome_arti_code_compose = lccl_arti_code  
              and lccl_fin_livraison = 'N'
              AND NVL (lccl_qte_commandee_uv, 0) > (  NVL (lccl_total_qte_livree_uv, 0) - NVL (lccl_total_qte_retournee_uv, 0))
              and to_char(LCCL_DT_LIVRAISON_CONFIRMEE, 'MM/YYYY') = '01/2012'
       START WITH nome_arti_code_composant = :RES_ARTICLE  --'Y5304'--NVL (pack_octal.get_article, NULL)
       CONNECT BY PRIOR nome_arti_code_compose = nome_arti_code_composant
              AND PRIOR nome_debut_validite <= trunc(sysdate)
              AND NVL (PRIOR nome_fin_validite, trunc(sysdate)) >= trunc(sysdate)
              ;
              return (nvl(V_besoin_cde,0));
              exception when others then return (0);
    end;
    MERCI.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut

    exemple si je donne le composant C01 elle me retourne 10 (supposons LCCL_QTE_COMMANDEE_UV = 10)
    si je donne le composant C03 elle me retourne 60 = 3*2*10 (supposons LCCL_QTE_COMMANDEE_UV = 10)
    Ca se rapporte bien a votre petit 1?
    Si c'est bien le cas, pour C01, dans la mesure ou:
    - c'est un composant*2 de C02
    -et que C02 est un composant *2 de PF01
    ne devrait-on pas avoir: (1+2*2)*10=50 C01 pour PF01?

  3. #3
    Membre averti
    Homme Profil pro
    OCTAL - ORACLE
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : OCTAL - ORACLE
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Citation Envoyé par Rams7s Voir le message


    Ca se rapporte bien a votre petit 1?
    Si c'est bien le cas, pour C01, dans la mesure ou:
    - c'est un composant*2 de C02
    -et que C02 est un composant *2 de PF01
    ne devrait-on pas avoir: (1+2*2)*10=50 C01 pour PF01?
    C02 c'est à la fois composant est composé,
    C02 est de coef 2 dans PF01 donc le besoin de C02= 2*10=20 (avec 10 la qté commandé de PF01).
    je m'intéresse que pour les composant (autrement dit les feuilles), pour PF01 les feuilles sont C01 et C03,

    vous avez raison, le besoin de C01 = (1+2*2)*10= 50

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2019, 09h42
  2. Requêtes multi-base
    Par nicolchr dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 12/11/2014, 11h50
  3. requêtes Multi Base avec Mot de Passe
    Par bohor2gannes dans le forum Access
    Réponses: 4
    Dernier message: 27/02/2006, 14h45
  4. Requête multi-base
    Par Vituret dans le forum Débuter
    Réponses: 1
    Dernier message: 04/04/2005, 16h41
  5. Réponses: 10
    Dernier message: 06/06/2004, 19h05

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