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

DB2 Discussion :

DECIMAL(n) : valeur limite


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Par défaut DECIMAL(n) : valeur limite
    Bonjour,

    Sur un Load, je récupère l'erreur suivante :

    INPUT VALUE X'17523331710C' OUT OF RANGE FOR COLUMN 'COL'

    La colonne en question est définie en DECIMAL(10,0). Pour moi la valeur ci-dessus est compatible avec la définition de la zone (6 octets). Je sais que la valeur décimale maximale est de 10^31-1. Donc je ne comprends pas bien où se situe le problème. Y a-t-il une valeur maximale en fonction de la précision demandée sur le type ?

    Merci pour votre aide.

    Patrick

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Bonjour,

    C'est quelle version de DB2 ? sur quelle plateforme ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Par défaut
    pardon : z/os, DB2 V9

  4. #4
    Membre Expert
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Par défaut
    Bonjour.

    Je ne sais pas exactement pour DB2, donc je peux très bien être hors sujet, mais on a eu toujours ce souci dans la famille IBM où un nombre est refusé ou génère un size error bien qu'il semble bien tenir théoriquement dans une zone mémoire.

    pour les DECIMAL(n,p) en DB2, la taille mémoire en octets se calcule par la formule E(n/2) + 1. Pour un DECIMAL(10,0), cette taille est de 6 octets comme tu l'as si bien dit, mais c'est la même taille aussi pour un DECIMAL(11,0). Donc on dispose réellement de 11 demi-octets, le 12è étant pour le signe, dans lesquels on va pouvoir mettre des 9 puisqu'on est en DECIMAL et pas autre chose (ça sera pire), donc théoriquement 99 999 999 999.
    Et le hic est là : toi tu utilises un masque (picture) de 10, donc on ne tiendra compte que de ces 10 digits quelque soit la capacité de la zone mémoire de stockage et même si cette zone en contient déjà un nombre plus grand.

    Même problème pour les BINARY.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Par défaut
    Bonjour et merci pour ta réponse,

    Je ne comprends pas la notion de "masque" dont tu parles. Voici la définition de la zone en question dans le fichier de descro des données en entrée (SYSPUNCH) :

    COL_NAME POSITION(166 : 171) DECIMAL

    La donnée se trouve bien en position 166 dans le fichier en entrée et sur 6 octets.
    Quant au "C" en fin de zone, c'est en fait un +3 en EBCDIC.

    Donc je ne vois toujours pas...

  6. #6
    Membre Expert
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Par défaut
    Je suis parti à partir de ça
    La colonne en question est définie en DECIMAL(10,0)
    Tu utilises cette description où ? Autant prendre DECIMAL(11,0)
    Le masque est le format sous lequel on voit (ou on voudrait voir) une donnée.
    Quant au "C" en fin de zone, c'est en fait un +3 en EBCDIC.
    Pour moi, il est dans le dernier demi-octet et il représente le signe positif du nombre 17523331710

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Je suis de l'avis de Luc.

    Et même si 6 octets peuvent physiquement contenir un DEC(11,0), si la définition est un DEC(10,0), un nombre sur 11 chiffres sera out.

    Ensuite la limite du DECIMAL est bien 10^31-1, mais c'est la limite maximum autorisée par DB2, et la définition de zone prime, donc cette limite n'est atteignable qu'avec un DECIMAL(31,0).
    Sinon la limite pour DEC(p,n) : 10^(p+n)-1/10^n

    Dans ton cas DEC(10,0) : limite = 9 999 999 999 < 17 523 331 710

  8. #8
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Citation Envoyé par goubipat Voir le message
    Bonjour,

    Sur un Load, je récupère l'erreur suivante :

    INPUT VALUE X'17523331710C' OUT OF RANGE FOR COLUMN 'COL'

    La colonne en question est définie en DECIMAL(10,0). Pour moi la valeur ci-dessus est compatible avec la définition de la zone (6 octets) ...
    Ben à mon humble avis non ...

    Ta zone de fichier contient ( 'C' étant le signe positif ) :

    +17 523 331 710

    ce qui, sauf erreur de ma part, ne rentre pas dans du DEC(10,0) ...

    EDIT : et C n'est pas un +3

Discussions similaires

  1. La valeur limite de UploadFilter?
    Par amnass dans le forum Glassfish et Payara
    Réponses: 8
    Dernier message: 03/05/2009, 16h01
  2. Réponses: 1
    Dernier message: 16/03/2009, 21h25
  3. valeur limite d'une fonction
    Par zizo08 dans le forum MATLAB
    Réponses: 20
    Dernier message: 30/11/2008, 16h51
  4. [Débutant] Modifier les axes : noms, valeurs limites et couleur
    Par niepoc dans le forum MATLAB
    Réponses: 11
    Dernier message: 14/05/2008, 13h35
  5. Redimensionner une JFrame avec valeur limite
    Par ppopov dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 15/01/2006, 20h08

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