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. 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....
        1. La solution etait tout simplement de declarer les variables en float
          et le tour etait joué

          salutations

          [Resolu]