|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 6 ![]() |
bonjour,
j'ai un petit probléme en ce qui concerne une procedure. j'ai des taches qui ont des commandes et ses commandes ont des factures. je voudrais calculer l'engagé = le montant des commandes - le montant des factures pour une tache. description de mes tables: tache: id_tache commande: num_commande,nombre, taux, id_tache factrue: num_fact, nombre, taux, num_commande mes procédures: 1) DROP procedure IF EXISTS engage_d_une_commande | create procedure engage_d_une_commande ( id int ) begin select c.taux*c.nombre-sum(f.taux * f.nombre) from facture f, commande c where f.num_cde=c.num_commande and num_cde=id and validee=1 group by num_cde ; end ;| call engage_d_une_commande(1)| cette procédure fonctionne et me renvoie l'engagé d'une commande (montant de la commande - montant des factures) 2) DROP procedure IF EXISTS engage_d_une_tache | create procedure engage_d_une_tache ( id int ) begin select c.taux*c.nombre-sum(f.taux * f.nombre) from facture f, commande c, tache t where f.num_cde=c.num_commande and t.id_tache=c.id_tache and c.id_tache=id and validee=1 and cloturee=0 group by c.id_tache, c.num_commande; end ;| call engage_d_une_tache(1)| me donne 2 montants (24 et 22) et quand je veux faire une somme de ce qui est dans le select (24+22) 46 cela me donne une erreur: invalid use of group fonction autrement j'ai pensé utiliser un curseur qui permettrait de sélectionner toutes les commandes d'une tache et d'appeler ensuite la procédure engage_d_une_commande pour chaque commande de la tache, mais je ne sais pas comment appeler une procédure dans une fonction j'espére que j'ai était claire dans mes explications merci |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : avril 2006 Messages : 6 ![]() |
c'est bon, avec un peu de recherche j'ai réussi à fair une fonction qui permet cela
elle parcourt les commandes de la tache et calcul pour chaque commande l'engagé de la commande DROP function IF EXISTS engage_d_une_commande| CREATE FUNCTION engage_d_une_commande ( id int ) RETURNS double #DETERMINISTIC BEGIN DECLARE temp,somme DOUBLE DEFAULT 0; DECLARE done INT DEFAULT 0; DECLARE a INT ; DECLARE cur1 CURSOR FOR SELECT num_commande FROM commande where id_tache=id; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur1; set somme = 0; set temp = 0; REPEAT FETCH cur1 INTO a; IF NOT done THEN select c.taux*c.nombre - sum(f.taux*f.nombre) INTO temp from commande c, facture f where c.num_commande = f.num_cde and c.num_commande=a and f.validee=1 and c.cloturee=0 group by c.num_commande; SET somme = somme+ temp; END IF; UNTIL done END REPEAT; CLOSE cur1; RETURN somme; END| select engage_d_une_commande(1);| merci quand meme |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com