Problème de decimal en sql

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
Configuration: Windows 2000
Firefox 2.0.0.3

4 réponses

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

    salutations

    [Resolu]
    1. Webmaster
      Forcément... si tu utilise un champ 'INT'...

      Il faut utiliser un champ DECIMAL ou FLOAT
      1. 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
        1. 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....