Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2012, 17h16   #1
Invité de passage
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 4
Points : 4
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 :
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 :
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 :
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.
fahmi.benrejab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 17h25   #2
Membre expérimenté
 
François
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 306
Points : 537
Points : 537

Citation:
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?
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 17h33   #3
Invité de passage
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 4
Points : 4
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
fahmi.benrejab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h14.


 
 
 
 
Partenaires

Hébergement Web