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