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 21/03/2007, 09h20   #1
Membre éprouvé
 
Avatar de WebPac
 
Inscription : mai 2004
Messages : 919
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 919
Points : 410
Points : 410
Par défaut Champ BCD & Champ DOUBLE PRECISION

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.
WebPac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 12h11   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par WebPac
j'ai un overflow car les champs sont de type BCD.
message d'erreur oracle?
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 12h16   #3
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Citation:
sous Oracle, je crée des tables avec des champs numériques DOUBLE PRECISION.
Merci de poster le CREATE TABLE correspondant avec la version d'Oracle.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 12h35   #4
Membre éprouvé
 
Avatar de WebPac
 
Inscription : mai 2004
Messages : 919
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 919
Points : 410
Points : 410
La création de la table :
Citation:
CREATE TABLE MATABLE (VILLE VARCHAR2(15), EXERCICE DOUBLE PRECISION, MOIS DOUBLE PRECISION, CA DOUBLE PRECISION)
Le message d'erreur n'est pas un message d'oracle, mais je n'ai ce message d'erreur que lorsque je travaille avec Oracle, je fais les même traitements avec d'autes bases de données comme Firebird, SQL Serveur ou MySQL et je n'ai pas d'erreur.

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.
WebPac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 12h52   #5
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
double precision est un float dans oracle

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
CREATE TABLE MATABLE (VILLE VARCHAR2(15), EXERCICE DOUBLE PRECISION, MOIS DOUBLE PRECISION, CA DOUBLE PRECISION)
TABLE created
 
SELECT data_type, data_length, data_precision, column_name FROM user_tab_columns WHERE table_name='MATABLE'
DATA_TYPE DATA_LENGTH DATA_PRECISION COLUMN_NAME                   
--------- ----------- -------------- ------------------------------
VARCHAR2           15                VILLE                         
FLOAT              22            126 EXERCICE                      
FLOAT              22            126 MOIS                          
FLOAT              22            126 CA                            
4 rows selected
 
 
INSERT INTO matable VALUES (1,1/3,1/7,1/13)
1 row inserted
 
 
SELECT sum(exercice)/sum(mois) FROM matable
SUM(EXERCICE)/SUM(MOIS)
-----------------------
       2.33333333333333
1 row selected


n'ayant pas Delphi, je ne peux guère t'aider plus
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 14h03   #6
Membre éprouvé
 
Avatar de WebPac
 
Inscription : mai 2004
Messages : 919
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 919
Points : 410
Points : 410
Dommage.

En continuant mes recherches, j'ai trouvé ça dans l'aide au sujet des champs BCD :
Citation:
De même, les données numériques qui ne peuvent tenir dans un double sont directement mappées au format décimal codé binaire (BCD).
J'ai l'impression du fait du grand nombre de décimales qu'il convertit le champ en BCD mais il a un problème de précision et fait un overflow au niveau du trop grand nombre de décimales.
WebPac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 15h16   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
as tu essayé le type BINARY_DOUBLE, qui est beaucoup plus rapide ?

Code :
CREATE TABLE matable (x binary_double);
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 15h32   #8
Membre éprouvé
 
Avatar de WebPac
 
Inscription : mai 2004
Messages : 919
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 919
Points : 410
Points : 410
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 ?
WebPac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 15h47   #9
Membre éprouvé
 
Avatar de WebPac
 
Inscription : mai 2004
Messages : 919
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 919
Points : 410
Points : 410
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.
WebPac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 16h57   #10
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 17h21   #11
Membre éprouvé
 
Avatar de WebPac
 
Inscription : mai 2004
Messages : 919
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 919
Points : 410
Points : 410
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.
WebPac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h17.


 
 
 
 
Partenaires

Hébergement Web