Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 15/06/2004, 11h07   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 34
Points : 14
Points : 14
Par défaut Procedure Stockée et IF

Cette procedure fonctionne bien sous IBCONSOLE

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
CREATE PROCEDURE "CDE_TOTAL_XXX"
(
  "ADH_NU" INTEGER,
  "CDE_NU" INTEGER,
  "MAG_NU" INTEGER,
  "IND_NU" INTEGER
)
RETURNS
(
  "QLV_01" INTEGER,
  "QLV_02" INTEGER,
  "QLV_03" INTEGER,
  "QLV_04" INTEGER,
  "QLV_05" INTEGER,
  "QLV_06" INTEGER,
  "QLV_07" INTEGER,
  "QLV_08" INTEGER,
  "QLV_09" INTEGER,
  "QLV_10" INTEGER,
  "QLV_11" INTEGER,
  "QLV_12" INTEGER,
  "QLV_13" INTEGER
)
AS
	BEGIN
	     /* Interrogation des livraisons */
	     FOR SELECT
                 Sum(QLV_01),
                 Sum(QLV_02),
                 Sum(QLV_03),
                 Sum(QLV_04),
                 Sum(QLV_05),
                 Sum(QLV_06),
                 Sum(QLV_07),
                 Sum(QLV_08),
                 Sum(QLV_09),
                 Sum(QLV_10),
                 Sum(QLV_11),
                 Sum(QLV_12),
                 Sum(QLV_13)
	         FROM CDE_LIV_DET
                 WHERE
		(ADH_NUMERO = :ADH_NU) AND
		(CDE_NUMERO = :CDE_NU) AND
		(CDE_INDICE = :IND_NU) AND
		(MAG_NUMERO = :MAG_NU)
	         INTO
                 :QLV_01,
                 :QLV_02,
                 :QLV_03,
                 :QLV_04,
                 :QLV_05,
                 :QLV_06,
                 :QLV_07,
                 :QLV_08,
                 :QLV_09,
                 :QLV_10,
                 :QLV_11,
                 :QLV_12,
                 :QLV_13
             DO
             BEGIN
             SUSPEND;
             EXIT;
             END
 
 
END
 ^
Je rajoute une ligne

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
CREATE PROCEDURE "CDE_TOTAL_XXX"
(
  "ADH_NU" INTEGER,
  "CDE_NU" INTEGER,
  "MAG_NU" INTEGER,
  "IND_NU" INTEGER
)
RETURNS
(
  "QLV_01" INTEGER,
  "QLV_02" INTEGER,
  "QLV_03" INTEGER,
  "QLV_04" INTEGER,
  "QLV_05" INTEGER,
  "QLV_06" INTEGER,
  "QLV_07" INTEGER,
  "QLV_08" INTEGER,
  "QLV_09" INTEGER,
  "QLV_10" INTEGER,
  "QLV_11" INTEGER,
  "QLV_12" INTEGER,
  "QLV_13" INTEGER
)
AS
	BEGIN
	     /* Interrogation des livraisons */
	     FOR SELECT
                 Sum(QLV_01),
                 Sum(QLV_02),
                 Sum(QLV_03),
                 Sum(QLV_04),
                 Sum(QLV_05),
                 Sum(QLV_06),
                 Sum(QLV_07),
                 Sum(QLV_08),
                 Sum(QLV_09),
                 Sum(QLV_10),
                 Sum(QLV_11),
                 Sum(QLV_12),
                 Sum(QLV_13)
	         FROM CDE_LIV_DET
                 WHERE
		(ADH_NUMERO = :ADH_NU) AND
		(CDE_NUMERO = :CDE_NU) AND
		(CDE_INDICE = :IND_NU) AND
		(MAG_NUMERO = :MAG_NU)
	         INTO
                 :QLV_01,
                 :QLV_02,
                 :QLV_03,
                 :QLV_04,
                 :QLV_05,
                 :QLV_06,
                 :QLV_07,
                 :QLV_08,
                 :QLV_09,
                 :QLV_10,
                 :QLV_11,
                 :QLV_12,
                 :QLV_13
             DO
             BEGIN
             [b]IF (:QLV_01 IS NULL) THEN :QLV_01 =0;[/b]    
             SUSPEND;
             EXIT;
             END
 
 
END
 ^
et là erreur

Dynamic SQL Error
SQL error code = -104
Token unknown - line 63, char 38
:

Je ne comprend pas pourquoi !!!!

Merci : : :

Edité par Barbibulle :
Cambon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2004, 12h11   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Les : sont à utiliser dans les ordres SQL des procédures stoquées (dans le INTO également)
Mais dans la PS elle même pas besoin de les mettres donc mettez tout simplement :
Code :
IF (QLV_01 IS NULL) THEN QLV_01 =0;
Et celà va fonctionner.
De plus comme votre ordre Select ne renvoit qu'un enregistrement le EXIT est de trop et vous n etes pas obligé d'utiliser FOR :

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
CREATE PROCEDURE "CDE_TOTAL_XXX" 
( 
  "ADH_NU" INTEGER, 
  "CDE_NU" INTEGER, 
  "MAG_NU" INTEGER, 
  "IND_NU" INTEGER 
) 
RETURNS 
( 
  "QLV_01" INTEGER, 
  "QLV_02" INTEGER, 
  "QLV_03" INTEGER, 
  "QLV_04" INTEGER, 
  "QLV_05" INTEGER, 
  "QLV_06" INTEGER, 
  "QLV_07" INTEGER, 
  "QLV_08" INTEGER, 
  "QLV_09" INTEGER, 
  "QLV_10" INTEGER, 
  "QLV_11" INTEGER, 
  "QLV_12" INTEGER, 
  "QLV_13" INTEGER 
) 
AS 
BEGIN 
  /* Interrogation des livraisons */ 
  SELECT Sum(QLV_01), 
         Sum(QLV_02), 
         Sum(QLV_03), 
         Sum(QLV_04), 
         Sum(QLV_05), 
         Sum(QLV_06), 
         Sum(QLV_07), 
         Sum(QLV_08), 
         Sum(QLV_09), 
         Sum(QLV_10), 
         Sum(QLV_11), 
         Sum(QLV_12), 
         Sum(QLV_13) 
    FROM CDE_LIV_DET 
    WHERE (ADH_NUMERO = :ADH_NU) 
      AND (CDE_NUMERO = :CDE_NU) 
      AND (CDE_INDICE = :IND_NU) 
      AND (MAG_NUMERO = :MAG_NU) 
    INTO :QLV_01, 
         :QLV_02, 
         :QLV_03, 
         :QLV_04, 
         :QLV_05, 
         :QLV_06, 
         :QLV_07, 
         :QLV_08, 
         :QLV_09, 
         :QLV_10, 
         :QLV_11, 
         :QLV_12, 
         :QLV_13;
  IF (QLV_01 IS NULL) THEN QLV_01 =0;
  SUSPEND; 
END 
 ^
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2004, 12h41   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 34
Points : 14
Points : 14
Par défaut Merci Barbibulle

Merci Barbibulle !!!

Au fait ou peut t'on trouver des exemples de procedures Interbase !




Cambon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2004, 13h18   #4
Membre confirmé
 
Avatar de TMuet
 
Homme Olivier Muet
Responsable de service informatique
Inscription : septembre 2003
Messages : 222
Détails du profil
Informations personnelles :
Nom : Homme Olivier Muet
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 222
Points : 254
Points : 254
Ici : http://levieux.developpez.com/tutopsib/
TMuet 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 19h38.


 
 
 
 
Partenaires

Hébergement Web