Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 08/01/2008, 21h07   #1
Membre habitué
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 450
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 450
Points : 131
Points : 131
Par défaut Division entière avec TRUNC

Bonsoir,
Je souhaiterais savoir qu'est ce qui n'allait pas lorsque j'utilise TRUNC.
Code :
1
2
 
q := TRUNC((volumeCommande-maxEspace)/volumeUnite),0);
Apparemment il y a un problème au niveau de la virgule mais je ne vois pas lequel.
Sinon connaissez-vous un autre moyen de récupérer la division entière de 2 float (autre procedure, cast,....)
Merci
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 21h29   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Ouais... j'adore ce jeu... alors faut trouver l'erreur ou le problème que tu as c'est ça ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 21h35   #3
Membre habitué
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 450
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 450
Points : 131
Points : 131
Non, en fait comme je l'ai dis plus haut je cherche à récupérer la division entière de 2 float.
J'ai trouvé la procédure TRUNC mais lorsque je fais "show errors" on me signale un problème au niveau de la virgule entre les deux paramètre.
Donc je voulais savoir si c'était bien comme cela que s'utilisait TRUNC.
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 21h54   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Serait-ce trop demander que de vouloir voir le message complet ?

Note que soit y'a un ",0" en trop soit un TRUNC à la place de ROUND
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 22h01   #5
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
Citation:
Envoyé par juve1897 Voir le message
Apparemment il y a un problème au niveau de la virgule mais je ne vois pas lequel.
Sinon connaissez-vous un autre moyen de récupérer la division entière de 2 float (autre procedure, cast,....)
Merci
tu as essayé d'enlever la virgule ? parceque si mes souvenirs sont exacts,il n'y a pas de ",0" dans la procedure TRUNC..
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 22h01   #6
Membre habitué
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 450
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 450
Points : 131
Points : 131
OK, je vais recommencer, désolé si je me suis mal exprimé.
Tout d'abord je souhaite récupérer la partie entière d'une division entre 2 float.
J'ai donc fais :
Code :
1
2
 
q := TRUNC((volumeCommande-maxEspace)/volumeUnite),0);
q étant un INTEGER et les autres variables des NUMBER(7,3).
Mais ça ne marche pas, voilà le message d'erreur :
Code :
1
2
3
4
5
6
 
PLS-00103: Encountered the symbol "," when expecting one of the
         following:
         . ( * % & = - + ; < / > at IN IS mod remainder NOT rem
         <an exponent (**)> <> OR != OR ~= >= <= <> AND OR LIKE LIKE2_
         LIKE4_ LIKEC_ BETWEEN || multiset member SUBMULTISET_
Donc je suppose que j'ai mal utilisé TRUNC et je souhaiterais savoir comment corriger mon erreur, ou si il y avait une autre manière de récupérer la partie entière d'un float.
Voilà, est-ce plus clair?
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 22h05   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est + clair en effet

Donc soit tu supprimes le ",0" soit tu remplaces TRUNC par ROUND
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 22h07   #8
Membre habitué
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 450
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 450
Points : 131
Points : 131
D'après ce que j'ai lu, TRUNC s'utilise de la manière suivante:
n étant le NUMBER que l'on veut tronquer, et m le nombre de décimal.
En l'occurrence je souhaite zéro décimal, donc TRUNC(f,0).
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 22h10   #9
Membre habitué
 
Avatar de LinuxUser
 
Inscription : avril 2007
Messages : 450
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 450
Points : 131
Points : 131
Citation:
Envoyé par orafrance Voir le message
c'est + clair en effet

Donc soit tu supprimes le ",0" soit tu remplaces TRUNC par ROUND
L'usage est :
Si c'est comme cela que ça s'utilise, j'ai essayé et j'ai toujours le même message erreur.

De plus ROUND ne sert-elle pas uniquement aux dates?
Peut importe, je n'arrive toujours pas à récupérer la partie entière d'une division flottante.
LinuxUser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 22h17   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
non, ROUND c'est pour les nombre et TRUNC éventuellement pour les dates. Si avec ROUND t'as encore un message sur la virgule c'est qu'il y a une erreur de syntaxe par ailleurs, un problème de parenthésage ou de quote mal fermés par exemple

Edit : il y a bien un problème de parenthése
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 14h41   #11
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par orafrance Voir le message
non, ROUND c'est pour les nombre et TRUNC éventuellement pour les dates.
C'était parti un peu trop vite.

Il y a un TRUNC (number function) et un TRUNC (date function).
Et plus important encore le TRUNC et le ROUND ne donnent pas les mêmes résultats
Code :
1
2
3
4
5
6
7
 
SQL> SELECT round(1.0/1.5), trunc(1.0/1.5) FROM dual
  2  ;
 
ROUND(1.0/1.5) TRUNC(1.0/1.5)
-------------- --------------
             1              0
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 14h49   #12
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 456
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 456
Points : 4 220
Points : 4 220
en 9i, ca marche
Code :
1
2
3
4
5
SELECT TRUNC(1/3,3)
FROM dual
 
TRUNC(1/3,3)
0,333
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 14h51   #13
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 456
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 456
Points : 4 220
Points : 4 220
Et TOUT ça pour ça ????
Code :
1
2
3
4
5
6
7
q := TRUNC(
			(volumeCommande-maxEspace)
			/
			volumeUnite
		)
		,0);

__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 15h01   #14
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par McM Voir le message
en 9i, ca marche
Code :
1
2
3
4
5
SELECT TRUNC(1/3,3)
FROM dual
 
TRUNC(1/3,3)
0,333
Et donc 0,333 est supposé à être "la partie entière d'une division entre 2 float"
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 15h14   #15
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
non, TRUNC(n,m) donne m xhiffre derrière la virgule et donc si m=0 tu auras la partie entière de n

en l'occurence, dans le cas présent c'est un bête problème de syntaxe avec un membre qui doit créer une discussion pour qu'on compte les parenthéses à sa place
orafrance 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 14h31.


 
 
 
 
Partenaires

Hébergement Web