Problème de decimal en sql

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

    salutations

    [Resolu]
    1
  2. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    Forcément... si tu utilise un champ 'INT'...

    Il faut utiliser un champ DECIMAL ou FLOAT
    0
  3. Stéphane
     
    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
  4. Stéphane
     
    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