|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() Inscription : mai 2004 Messages : 919 ![]() |
Bonjour tout le monde,
sous Oracle, je crée des tables avec des champs numériques DOUBLE PRECISION. Lorsque je souhaite faire une requête sur cette table en faisant un SELECT SUM(Chp)/SUM(Chp2).... j'ai un overflow car les champs sont de type BCD. J'ai essayé de créer les champs non pas en DOUBLE PRECISION mais en NUMBER(15,4) mais ça me fait la même chose. Je ne suis pas spécialiste Oracle, ce problème est-il connu ? Fais-je mal les choses ? Y-a-t-il une astuce pour pas avoir ce genre de soucis ? Pour info, je travaille depuis Delphi et utilise les composants dbExpress. |
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Citation:
|
|
|
00
|
|
|
#3 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
|
|
|
|
00
|
|
|
#4 | |
|
Membre éprouvé
![]() Inscription : mai 2004 Messages : 919 ![]() |
La création de la table :
Citation:
Apparemment, l'erreur vient du fait que les champs sont de type BCD. La version d'Oracle que j'utilise est la version 10g Express, mais j'ai des utilisateurs qui ont des versions 8i à 10 et qui ont les mêmes erreurs. |
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
double precision est un float dans oracle
Code :
n'ayant pas Delphi, je ne peux guère t'aider plus |
||
|
00
|
|
|
#6 | |
|
Membre éprouvé
![]() Inscription : mai 2004 Messages : 919 ![]() |
Dommage.
En continuant mes recherches, j'ai trouvé ça dans l'aide au sujet des champs BCD : Citation:
|
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
as tu essayé le type BINARY_DOUBLE, qui est beaucoup plus rapide ?
Code :
CREATE TABLE matable (x binary_double); |
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Inscription : mai 2004 Messages : 919 ![]() |
Merci avec le binary_double ça passe sans erreur !
Merci beaucoup, tu me sors un pieux du pied. Quelles sont les différences entre DOUBLE PRECISION et BINARY_DOUBLE ? |
|
|
00
|
|
|
#9 |
|
Membre éprouvé
![]() Inscription : mai 2004 Messages : 919 ![]() |
Arg, ça n'existe qu'à partir de la version 10g
Je ne vais pas pouvoir l'intégrer ou alors uniquement en option car je dois être compatible au moins avec la version 8. Et même ça ne résoudra le problème que pour les utilisateurs qui sont en 10g et plus. |
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
binary_double et binary_float, c'est vraiment des calculs en virgules flottant et suivant les opérations, ça peut s'avérer très efficaces
Avec les NUMBER/FLOAT, on a bien des virgules, mais c'est un format propriétaire d'Oracle. Pour ton problème Delphi, je suis désolé si je ne peux t'aider plus |
|
00
|
|
|
#11 |
|
Membre éprouvé
![]() Inscription : mai 2004 Messages : 919 ![]() |
Merci en tout cas pour ton aide, les binary_double seront bien utiles pour les utilisateurs qui ont Oracle 10g et progressivement les gens migrent.
Pour le reste, je vais attendre de mettre à jour les composants dbExpress, ce sont eux en fait qui buguent, j'ai une vieille version. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com