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 05/07/2011, 10h11   #1
Membre habitué
 
Avatar de hiul dragonfel
 
Inscription : juin 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 186
Points : 106
Points : 106
Envoyer un message via MSN à hiul dragonfel
Par défaut Procédure stockée non terminée

Bonjour, je me rapproche de cette section car je ne comprends pas pourquoi ma procédure stockée ne m'ajoute que deux enregistrements alors qu'elle devrait m'en ajouter 600+.

Il doit y avoir une erreur dans ma procédure, mais je ne sais pas où, et je cherche depuis une semaine sans résultats.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
CREATE PROCEDURE generer_mouvements_BQ()
   BEGIN
      DECLARE NoMouvement INT;
 
      DECLARE done INT DEFAULT 0;
 
      DECLARE id_facture, id_compte_comptable INT DEFAULT 0;
      DECLARE libelle, direction, type_facture VARCHAR(256);
      DECLARE montant DECIMAL(10,2);
 
      DECLARE compteClient CURSOR FOR
      SELECT f.id_f,
             m.id_cc,
             ref_internee,
             montant,
             direction,
             IF(direction = 'credit', 'avoir', 'droit')
      FROM f
      INNER JOIN m
      ON m.id_m = f.id_m
      INNER JOIN mc
      ON mc.id_cc = m.id_cc
      WHERE id_etat_facture > 2
      AND id_etat_facture < 9
      GROUP BY id_f;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 
      SELECT MAX(mouvement)+1 INTO NoMouvement FROM mouvements_comptable;
      OPEN compteClient;
 
      REPEAT
         FETCH compteClient INTO id_f, id_cc, libelle, montant, direction, type_facture;
 
         IF done != 1 THEN
            INSERT INTO mouvements_comptable
            (
               mouvement,
               journal,
               id_facture,
               id_compte_comptable,
               libelle_mouvement,
               montant,
               direction,
               analitique,
               type_facture
            )
            VALUES(
               NoMouvement,
               'BQ',
               id_facture,
               id_compte_comptable,
               libelle,
               montant,
               direction,
               'LRJ INFO',
               type_facture
            ), (
               NoMouvement,
               'BQ',
               id_facture,
               418,
               libelle,
               montant,
               IF(direction = 'credit', 'debit', 'credit'),
               'LRJ INFO',
               type_facture
            );
 
            SET NoMouvement = NoMouvement + 1;
         END IF;
 
      UNTIL done = 1 END REPEAT;
 
      CLOSE compteClient;
 
   END//
__________________
Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.
hiul dragonfel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 12h10   #2
Membre habitué
 
Avatar de hiul dragonfel
 
Inscription : juin 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 186
Points : 106
Points : 106
Envoyer un message via MSN à hiul dragonfel
Bon ben j'ai finalement trouvé u_u

En fait, dans la procédure d'origine, les noms des variables que j'utilisais étaient les mêmes que les noms des colonnes de ma requête, ce qui devait engendrer un conflit et renvoyer une erreur '02xxx'

Lorsque j'ai continué mes tests, j'ai changé de nomenclature en mettant la première lettre du type de la variable suivit d'un underscore "_" puis le nom de la variable.

ex:
Code :
DECLARE c_toto VARCHAR(256);
ce qui a résolu mon problème
__________________
Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.
hiul dragonfel 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 23h27.


 
 
 
 
Partenaires

Hébergement Web