là, je sèche aussi ????
là, je sèche aussi ????
Merci d'ajouter un sur les tags qui vous ont aidé
je remets le code tout entier, sait-on jamais !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 CREATE PROCEDURE PR_ABH_RESEAU_ASSAINISSEMENT ( unite char(20), date_bilan date) returns ( date_curage date, nom_unite varchar(20), nom_commune varchar(40), lin_total float, volume_collecte bigint, etat_reseau varchar(15)) as BEGIN FOR select tb_curage.date_curage, tb_unite.nom_unite, tb_commune.nom_commune, tb_commune_pop_lin.lineaire_visitable + tb_commune_pop_lin.lineaire_non_visitable lin_total, tb_curage.volume_collecte, tb_commune_pop_lin.etat_reseau from tb_curage inner join tb_commune on (tb_curage.code_commune = tb_commune.code_commune) inner join tb_centre on (tb_commune.code_centre = tb_centre.code_centre) inner join tb_unite on (tb_centre.code_unite = tb_unite.code_unite) inner join tb_commune_pop_lin on ((tb_curage.code_commune = tb_commune_pop_lin.code_commune) and Extract(year from tb_curage.date_curage) = tb_commune_pop_lin.annee_de_comparaison) where ( (tb_curage.date_curage =: date_bilan and upper(tb_unite.nom_unite) starting with (:unite)) ) INTO :date_curage, :nom_unite, :nom_commune, :lin_total, :volume_collecte, :etat_reseau DO BEGIN SUSPEND; END END
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
une idée
ta variable unite est déclarée en char(20). A mon avis ce devrait être un VARCHAR, pour éviter les espaces non-significatifs ou
Merci d'ajouter un sur les tags qui vous ont aidé
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
au plaisir
Merci d'ajouter un sur les tags qui vous ont aidé
Salut
ces PS que des problèmes
voici un autre problème je balance le code en 1er :
dans la partie en rouge je veux lever une exception est-il possible ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 CREATE PROCEDURE PS_ABH_STATION_EPURATION ( date_debut date, date_fin date) returns ( nom_step varchar(15), nom_commune varchar(40), nom_unite varchar(20), lieux_rejet varchar(15), capacite bigint, localisation_step varchar(20), x_utm bigint, y_utm bigint, date_mise_service date, volume_mj_sortie integer, dbo5_sortie integer, dco_sortie integer) as BEGIN FOR select tb_unite.nom_unite, tb_commune.nom_commune, tb_step.nom_step, tb_step.capacite, tb_step.lieux_rejet, tb_step.localisation_step, tb_step.x_utm, tb_step.y_utm, tb_step.date_mise_service, avg( tb_process.volume_mj_sortie ) volume_mj_sortie, avg( ((tb_process.dbo5_entree-tb_process.dbo5_sortie)/nullif(tb_process.dbo5_entree,0))*100 ) dbo5_sortie, avg( ((tb_process.dco_entree-tb_process.dco_sortie)/nullif(tb_process.dco_entree,0))*100 ) dco_sortie from tb_process inner join tb_step on (tb_process.code_step = tb_step.code_step) inner join tb_commune on (tb_step.code_commune = tb_commune.code_commune) inner join tb_unite on (tb_step.code_unite = tb_unite.code_unite) where ( (tb_process.date_bilan between :date_debut and :date_fin) ) group by tb_unite.nom_unite, tb_commune.nom_commune, tb_step.nom_step, tb_step.capacite, tb_step.lieux_rejet, tb_step.localisation_step, tb_step.x_utm, tb_step.y_utm, tb_step.date_mise_service INTO :NOM_UNITE, :NOM_COMMUNE, :NOM_STEP, :CAPACITE, :LIEUX_REJET, :LOCALISATION_STEP, :X_UTM, :Y_UTM, :DATE_MISE_SERVICE, :VOLUME_MJ_SORTIE, :DBO5_SORTIE, :DCO_SORTIE DO BEGIN if (date_debut > date_fin) then exit; suspend; END END
merci par avance
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Les PS sont faites pour résoudre des problèmes et non en créer.
la vérification que tu faitpeut se faire au début de la PS.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (date_debut > date_fin) then
Pour lever une exception... il suffit d'en créer une personnalisée :
puis de la lever dans la PS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part create exception Ex_Erreur_Date 'La date de début est postérieure a la date de fin'Voila.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (date_debut > date_fin) then EXCEPTION Ex_Erreur_Date
Si vous êtes libre, choisissez le Logiciel Libre.
merci TryExceptEnd
juste un pépin
l'exception est levée mais j'ai tjrs un tableau de résulta vide alors que ce que je veux est un arrêt total donc même le tableau de résultat ne sort pas, est-ce possible ?
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
C'est dans le code client (Delphi ?) que tu doit gérer l'exception levée dans Firebird, ou tout simplement faire la vérification par le code client avant d'appeler la PS.
Si vous êtes libre, choisissez le Logiciel Libre.
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Salut !
mon code :
mon problème : l'erreur n'est jamais soulevée même quand j'essaie avec date_debut > date_fin ! pourtant tout parait logique....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 CREATE PROCEDURE PS_ABH_STATION_EPURATION ( date_debut date, date_fin date) returns ( nom_step varchar(15), nom_commune varchar(40), nom_unite varchar(20), lieux_rejet varchar(15), capacite bigint, localisation_step varchar(20), x_utm bigint, y_utm bigint, date_mise_service date, volume_mj_sortie integer, dbo5_sortie integer, dco_sortie integer) as BEGIN FOR select d.nom_unite, c.nom_commune, b.nom_step, b.capacite, b.lieux_rejet, b.localisation_step, b.x_utm, b.y_utm, b.date_mise_service, avg( a.volume_mj_sortie ) volume_mj_sortie, avg( ( ( a.dbo5_entree - a.dbo5_sortie ) / nullif( a.dbo5_entree,0 ) ) * 100 ) dbo5_sortie, avg( ( ( a.dco_entree - a.dco_sortie ) / nullif( a.dco_entree,0 ) ) * 100 ) dco_sortie from tb_process a inner join tb_step b on (a.code_step = b.code_step) inner join tb_commune c on (b.code_commune = c.code_commune) inner join tb_unite d on (b.code_unite = d.code_unite) where ( (a.date_bilan between :date_debut and :date_fin) ) group by d.nom_unite, c.nom_commune, b.nom_step, b.capacite, b.lieux_rejet, b.localisation_step, b.x_utm, b.y_utm, b.date_mise_service INTO :NOM_UNITE, :NOM_COMMUNE, :NOM_STEP, :CAPACITE, :LIEUX_REJET, :LOCALISATION_STEP, :X_UTM, :Y_UTM, :DATE_MISE_SERVICE, :VOLUME_MJ_SORTIE, :DBO5_SORTIE, :DCO_SORTIE DO BEGIN IF (:date_debut > :date_fin) THEN EXCEPTION ERREUR_DATE; suspend; END END
une idée peut-être, merci par avance
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
normal
Tes 2 dates sont fournies à l'entrée de la PS.
Elles sont fournies à la requête pour exécution. Hors si les dates sont fausses la requête ne sortira rien, donc rien ne passe par ton test d'exception.
Tu dois mettre ton test d’exception avant la requête.
Merci d'ajouter un sur les tags qui vous ont aidé
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Salut !
j'ai cette PS :
Le compilateur m'indique une erreur de type colonne inconnue dans cette partie là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 PS_RATIO_CENTRE( date_debut date, date_fin date) returns ( code_unite varchar(2), nom_unite varchar(20), frais_total bigint, volume_collecte bigint, ratio_exp_eau_collectee float) as BEGIN FOR select /* affichage du code de l'unité */ e.code_unite, /* affichage du nom de l'unité */ e.nom_unite, /* affichage des frais d'exploitation afférente à la période choisie */ sum( a.frais ) frais, /* affichage du volume collecté durant cette période */ (select sum( tb_curage.volume_collecte ) from tb_unite inner join tb_centre on (tb_unite.code_unite = tb_centre.code_unite) inner join tb_commune on (tb_centre.code_centre = tb_commune.code_centre) inner join tb_curage on (tb_commune.code_commune = tb_curage.code_commune) where ( ( tb_unite.code_unite = e.code_unite ) and ( tb_curage.date_curage between :date_debut and :date_fin) ) ) as volume_collecte, /* calcul et affichage du ratio d'exploitation */ avg( frais / nullif(volume_collecte,0 ) ) ratio_exp_eau_collectee from tb_frais_exploitations a /* jointure simlple pour avoir les centres d'assainissement */ inner join tb_centre b on ( a.code_centre = b.code_centre ) /* jointure simple pour avoir les informations de l'unité */ inner join tb_unite e on ( b.code_unite = e.code_unite ) /* filtrage sur la période choisie */ where ( ( a.date_mois between :date_debut and :date_fin ) ) /* grouper les données pour les synthétiser par unité */ group by e.code_unite, e.nom_unite into :CODE_UNITE, :NOM_UNITE, :FRAIS_TOTAL, :VOLUME_COLLECTE, :RATIO_EXP_EAU_COLLECTEE do begin suspend; end end
l'erreur est déclarée pour l'alias volume_collecte mais pas pour frais or que les deux sont des alias !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 /* calcul et affichage du ratio d'exploitation */ avg( frais / nullif(volume_collecte,0 ) ) ratio_exp_eau_collectee
comment puis-je exploiter l'alias volume_collecte pour ne pas recopier la requête imbriquée dans l'expression qui calcule le ratio ?
Merci par avance
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager