IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

procedure qui donne un montant


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    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

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Accès pointeur qui donne rien :s
    Par EagleEye dans le forum MFC
    Réponses: 3
    Dernier message: 02/03/2006, 18h32
  2. Procedure qui permet d'envoyer un email
    Par azziz2005 dans le forum Oracle
    Réponses: 2
    Dernier message: 28/02/2006, 12h33
  3. Réponses: 3
    Dernier message: 09/02/2006, 12h26
  4. Réponses: 4
    Dernier message: 28/10/2005, 16h30
  5. Afficher une fenêtre d'informations qui donne l'impression de se détâcher
    Par jean_bobi dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 25/09/2005, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo