HackeD by Jerem'S
Forums   Users     List   Post   Subscribe Login [guest]   Register   Profile   Search

<< Previous   |   Next >>
Author Subject:   Requête multi-niveaux : arbre
send an email to Fahmi Ben Rejab      
Fahmi Ben Rejab
User
1 message(s)

posted 27/01/2012 12:34                    
Bonjour,

J'ai une 1ere table(nomenclature) et une dexieume table (ligne_cde_client)
structure des tables:
----------------------
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é.
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.
------------
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.
FBR


Add reply
Forums W-Agora