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.