IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Débordement BCD


Sujet :

Oracle

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut Débordement BCD
    Salut tout le monde,
    j'essai d'ouvrir une requête SQL agrégée avec un champ calculé utilisant un CASE WHEN.
    La base de donnée est Oracle 8.

    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT 
    	WVENTES_VENTES_N_N1.CSERIE_, 
    	WVENTES_VENTES_N_N1.CLIBELLESERIE_, 
    	SUM (WVENTES_VENTES_N_N1.CQUANTIT__), 
    	CASE WHEN SUM(WVENTES_VENTES_N_N1.CQUANTIT__)<>0 THEN SUM(WVENTES_VENTES_N_N1.CCASTANDARD_)/SUM(WVENTES_VENTES_N_N1.CQUANTIT__) ELSE 0 END  CPRU_2006_ 
     
    FROM 
    	WVENTES_VENTES_N_N1 
    WHERE 
    	( WVENTES_VENTES_N_N1.CNUMSOCI_T__ = '0066'
     AND 
    	WVENTES_VENTES_N_N1.CGRANDEFAMILLE_ = '21'
     AND 
    	WVENTES_VENTES_N_N1.CANN_E_ = 2006 ) 
    GROUP BY 
    	WVENTES_VENTES_N_N1.CSERIE_, 
    	WVENTES_VENTES_N_N1.CLIBELLESERIE_
     
    ORDER BY 
    	WVENTES_VENTES_N_N1.CSERIE_, 
    	WVENTES_VENTES_N_N1.CLIBELLESERIE_
    Le moteur de la base de donnée retourne comme erreur :
    Débordement BCD
    Le CASE WHEN sert à tester que la valeur du dénominateur ne soit pas nulle. Je ne sais pas quoi faire.

    Avez-vous une idée ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est pas une erreur Oracle ça

  3. #3
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par Fred_D
    c'est pas une erreur Oracle ça
    +1

    t'utilises pas Delphi par hasard + composants dbExpress ?
    PpPool

  4. #4
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci pour cette information.
    Ca veut dire que c'est une erreur générée dans le reste de l'application. Ce qui en m'arrange pas trop.

  5. #5
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Exact, je travaille bien avec Delphi et les composant dbExpress.
    Tu m'as donné une idée de recherche et j'ai trouvé dans l'unité DBConsts la valeur suivante :
    SBcdOverflow = 'Débordement BCD';
    Je pense que ça doit venir de la valeur du dénominateur qui doit être très proche de 0 sans être nulle, ce qui fait que la division retourne un nombre énorme.

  6. #6
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Pour info, si ça peut aider quelqu'un qui aura le même problème, il fallait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE WHEN SUM(WVENTES_VENTES_N_N1.CQUANTIT__)<>0 THEN SUM(WVENTES_VENTES_N_N1.CCASTANDARD_)/SUM(WVENTES_VENTES_N_N1.CQUANTIT__) ELSE 0 END
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CASE WHEN SUM(WVENTES_VENTES_N_N1.CQUANTIT__)<>0 THEN 
    ROUND( SUM(WVENTES_VENTES_N_N1.CCASTANDARD_)/SUM(WVENTES_VENTES_N_N1.CQUANTIT__) [,2 ) ELSE 0 END
    Car les nombres possédaient 6 chiffres après la virgule et apparement, les champs BCD n'aiment pas ça, il fallait les arrondir.

    Voilà, c'est [Résolu].
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment convertir de l'héxadécimal vers du bcd ?
    Par chourmo dans le forum Langage
    Réponses: 1
    Dernier message: 23/06/2005, 20h31
  2. Affichage heure : Qu'est-ce que le BCD ?
    Par Mookie dans le forum Assembleur
    Réponses: 2
    Dernier message: 06/02/2004, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo