Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/07/2011, 16h50   #1
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
Par défaut elimination d'une division par zéro

Bonjour à tous,

comment éliminer l'erreur "le diviseur est égal à zéro" dans une instruction du type
Code :
1
2
SELECT NVL(SUM(DECODE(M.SENS, 2 ,M.MT_MN)) / SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2)))  ,0)
WHERE .....
merci
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 17h12   #2
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par antalata Voir le message
Bonjour à tous,

comment éliminer l'erreur "le diviseur est égal à zéro" dans une instruction du type
Code :
1
2
SELECT NVL(SUM(DECODE(M.SENS, 2 ,M.MT_MN)) / SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2)))  ,0)
WHERE .....
merci
Utilisez la function nullif

Code :
1
2
3
4
5
6
7
 
SELECT nvl(sum(decode(m.sens, 2 ,m.mt_mn)) / nullif(
                                               sum(decode(m.sens, 2,(m.qte*m.qte2)))  
                                              , 0
                                               )
                                             ,0)
WHERE .....
Bien à vous

Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 20h07   #3
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
Bonjour,

Pour ma part, étant donné que si la somme est nulle, le select n'a pas de sens,
Si on est sûr que M.QTE et M.QTE2 ne peuvent pas être négatives, alors il suffit d'éliminer les lignes qui contiennent une de ces quantités à nul en ajoutant simplement un filtre supplémentaire à la clause WHERE :

Code :
1
2
WHERE
  ((M.QTE <> 0) AND (M.QTE2 <> 0)) AND ....
ou encore :
Code :
1
2
WHERE
  (M.QTE*M.QTE2 <> 0 )AND ....
Cordialement
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 13h35   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Il faut d'abord que vous definissiez la regle a appliquer lorsque la valeur du diviseur est 0.

Apres vous pouvez faire ce genre de chose

Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
	CASE 
	WHEN 
		COALESCE (SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2))),0) = 0 THEN 0 
	ELSE
		NVL(SUM(DECODE(M.SENS, 2 ,M.MT_MN)) / SUM(DECODE(M.SENS, 2,(M.QTE*M.QTE2)))  ,0)	
	END
FROM
	...
 
WHERE 
	.....
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 12h44   #5
Futur Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 15
Points : 15
Par défaut remerciements

merci à tous, j'ai utilisé l'instruction case et tout est OK.
antalata est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h26.


 
 
 
 
Partenaires

Hébergement Web