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

PL/SQL Oracle Discussion :

Problème de conversion d'un varchar2 en Number(15,10)


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    dev
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut Problème de conversion d'un varchar2 en Number(15,10)
    Bonjour,
    j'ai un Varchar2 contenant la chaine de caractère suivante :
    123456789012345.1234567890 , je veux stocker cette chaîne dans un NUMBER(15,10) ,je veux pas qu'il me prenne 11 chiffre apres la virgule par exemple, Or, je constate qu'il me les prend, j'ai utilisé la fonction To_NUMBER avec toutes possibilité imajinables , Aidez moi Svp
    Merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Peux tu préciser les ordres d'insertion en base, et de select qui t'amène à dire ça ?

    Premièrement, un number(15,10), c'est 5 chiffres avant la virgule et 10 après.. (15 dont 10)
    Faudrait donc déclarer un number(25,10)
    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
    22
    23
    24
    25
    declare
     n1 NUMBER(25,10);
      c VARCHAR2(30) := '123456789012345.1234567890';
     n2 NUMBER(15,10);
    begin
     n1 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
    --
     n2 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
    end;
     
     
    Erreur commençant à la ligne 1 de la commande :
    declare
     n1 NUMBER(25,10);
      c VARCHAR2(30) := '123456789012345.1234567890';
     n2 NUMBER(15,10);
    begin
     n1 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
    --
     n2 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
    end;
    Rapport d'erreur :
    ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: précision de NUMBER trop élevée
    ORA-06512: à ligne 8
    06502. 00000 -  "PL/SQL: numeric or value error%s"

  3. #3
    Membre à l'essai
    Profil pro
    dev
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut
    Merci Mcm , j'ai bien déclaré un NUMBER(25,10) c'est une erreur de frappe désolé.
    Alors la chaine de caractère provient d'une table contenant que des varchar2(4000), (table d'import non typée), Je dois prendre cette valeur qui représente un montant et la mettre dans ma table typée ( NUMBER(25,10)) .
    j'essaie avec cette requête qui me retroune 123456789012345
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT to_number('123456789012345,12345') FROM dual
    quand j'essaie d'inserer cette ligne dans ma table contenant la colonne typée MNT NUMBER (25,10)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TEST_ksk(MNT)  SELECT to_number('123456789012345,12345') FROM dual
    je vérifie ce qu'est inséré dans ma table
    j'obtiens bizarrement
    123456789012345,0080000000

    Help

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    C'est simplement le format de restitution de ton client qui doit être configuré pour ajouter les 0

    Edit : ,08 ??? C'est quoi cette histoire ?

  5. #5
    Membre à l'essai
    Profil pro
    dev
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut
    Je crois que le .008 est un bug d'oracle , , en faisant mes tests avec des petites chaines de caracteres , tout foncitionne , par contre essaie d'exéctuer cette requête , tu verra que tu obtiendras le fameux .0080
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SELECT CAST(to_number(substr('123456789012345.1234567899', 1, instr('123456789012345.1234567899', '.') + 14), '999999999999999.9999999999') AS NUMBER(25,10))  FROM dual

  6. #6
    Membre à l'essai
    Profil pro
    dev
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut
    Citation Envoyé par keredinio Voir le message
    Je crois que le .008 est un bug d'oracle , , en faisant mes tests avec des petites chaines de caracteres , tout foncitionne , par contre essaie d'exéctuer cette requête , tu verra que tu obtiendras le fameux .0080
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SELECT CAST(to_number(substr('123456789012345.1234567899', 1, instr('123456789012345.1234567899', '.') + 14), '999999999999999.9999999999') AS NUMBER(25,10))  FROM dual
    Une piste ?

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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