Problème de decimal en sql

Fermé
Stéphane - 29 mai 2007 à 11:34
 Stéphane - 30 mai 2007 à 11:37
Bonjour j'ai un problème sur sql

Je dois afficher un pourcentage dans une procedure imbriquée mais voila, je n'y arrive pas et je ne recois qu'un nombre entier.

je vous transmet mon code pour que vous puissez pointer mon erreur du doigt.

Je vous remercie par avance.

Stephane

create procedure proc7_avions
@destination varchar(25)='%'
as
declare @numavion varchar (10),@destinat varchar(25),@nbreservation int,
@nbplace int, @dispo int, @message varchar (80)

declare proc7_curseur CURSOR for

select v.noavion, r.destinat,nbreserv=count(*)
from reservations r, vols v
where (r.novol=v.novol) and (r.destinat like @destination)
group by v.noavion,r.destinat

open proc7_curseur

fetch next from proc7_curseur
into @numavion, @destinat, @nbreservation
while @@fetch_status=0
begin
set @nbplace =(select nbpassag from avions a, type_avions t
where (a.type=t.type) and (noavion=@numavion))

set @dispo=(@nbreservation*100 /@nbplace)
print ''
print '***********************************'
print ''
set @message='La destination '+@destinat+' effectué par l''avion '+@numavion+
' contient '+str(@dispo,4)+'% d''occupation'
print @message
fetch next from proc7_curseur
into @numavion, @destinat,@nbreservation
end
close proc7_curseur
deallocate proc7_curseur

4 réponses

La solution etait tout simplement de declarer les variables en float
et le tour etait joué

salutations

[Resolu]
1
Jean-François Pillou Messages postés 18301 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 274
29 mai 2007 à 11:37
Forcément... si tu utilise un champ 'INT'...

Il faut utiliser un champ DECIMAL ou FLOAT
0
Bonjour et merci pour ta reponse rapide mais....

désolé mais c'est une des première chose que j'ai testé mais sans resultat different.

Pour 0.666% il me renvoit toujours 0

j'ai pourtant remplacer le int par du decimal dans les variables nbresrvation,nbplace et dispo.

je ne comprend vraiment pas ce qui cloche

Merci vraiment de m'aider

Stéphaen
0
Pour mieux comprendre mon problème, je vous retourne mon code sql modifié :

---------------------------------------------------------------------
create procedure proc7_avions
@destination varchar(25)='%'
as
declare @numavion varchar (10),@destinat varchar(25),@nbreservation decimal,
@nbplace decimal, @dispo decimal, @message varchar (80)

declare proc7_curseur CURSOR for

select v.noavion, r.destinat,nbreserv=count(*)
from reservations r, vols v
where (r.novol=v.novol) and (r.destinat like @destination)
group by v.noavion,r.destinat

open proc7_curseur

fetch next from proc7_curseur
into @numavion, @destinat, @nbreservation
while @@fetch_status=0
begin
set @nbplace =(select nbpassag from avions a, type_avions t
where (a.type=t.type) and (noavion=@numavion))

set @dispo=(@nbreservation*100 /@nbplace)
print ''
print '***********************************'
print ''
set @message='La destination '+@destinat+' effectué par l''avion '+@numavion+
' contient '+str(floor(@dispo),3,2)+'% d''occupation'
print @message
fetch next from proc7_curseur
into @numavion, @destinat,@nbreservation
end
close proc7_curseur
deallocate proc7_curseur

-----------------------------------------------------------------
et la reponse rendu :

***********************************

La destination BRUXELLES effectué par l'avion X01 contient 1.0% d'occupation

***********************************

La destination MARSEILLE effectué par l'avion X01 contient 0.0% d'occupation

***********************************

La destination NEW-YORK effectué par l'avion X01 contient 0.0% d'occupation

***********************************

La destination OSLO effectué par l'avion X02 contient 0.0% d'occupation

-----------------------------------------------------------------
Et surtout les données exemple : nbplace (bruxelle (1)) 330 et nbreservation (idem) 2
Ce qui devrait donner 0.606060....
0