Rechercher : dans
Par :

Problème de decimal en sql

Dernière réponse le 30 mai 2007 à 11:37:57 Stéphane, le 29 mai 2007 à 11:34:39 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Problème de decimal en sql » dans :
Le langage SQL Voir Qu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
Attaques par injection de commandes SQL Voir Injection de commandes SQL Les attaques par injection de commandes SQL sont des attaques visant les sites web s'appuyant sur des bases de données relationnelles. Dans ce type de sites, des paramètres sont passés à la base de données sous forme...
SQL - Commande SELECT Voir Le langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...
Visual FoxPro et SQL-Server VoirVisual Foxpro 9 et SQL-Server 2005 Quoi de mieux que Visual FoxPro pour bien utiliser SQL-Server ? Voici une question intéressante ! Pour plus d'information voir l'article de Joël Post http://www.cyberfoxpro.com/joel et les fichiers...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
PL/SQL - Introduction au langage PL/SQL VoirIntroduction au langage PL/SQL Le langage PL/SQL est un langage L4G (entendez par ce terme un langage de quatrième génération), fournissant une interface procédurale au SGBD Oracle. Le langage PL/SQL intègre parfaitement le langage SQL en lui...
SQL - Opérations ensemblistes VoirLes opérations ensemblistes Les opérations ensemblistes en SQL, sont celles définies dans l'algèbre relationnelle. Elles sont réalisées grâce aux opérateurs : UNION INTERSECT (ne fait pas partie de la norme SQL et n'est donc pas implémenté dans...

1

Jeff, le 29 mai 2007 à 11:37:10

Forcément... si tu utilise un champ 'INT'...

Il faut utiliser un champ DECIMAL ou FLOAT Jeff - Wm@Ccm -

Répondre à Jeff

2

Stéphane, le 29 mai 2007 à 11:52:28

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

Répondre à Stéphane

3

Stéphane, le 29 mai 2007 à 12:07:29

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....

Répondre à Stéphane

4

 Stéphane, le 30 mai 2007 à 11:37:57
  • +1

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

salutations

[Resolu]

Répondre à Stéphane