Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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 03/05/2006, 10h16   #1
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 3
Points : 3
Par défaut procedure qui donne un montant

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
calla29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 13h58   #2
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 3
Points : 3
Par défaut réponse

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
calla29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h11.


 
 
 
 
Partenaires

Hébergement Web