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 :

[Oracle] comment faire un to_number sur un replace?


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut [Oracle] comment faire un to_number sur un replace?
    Bonjour,

    J'ai une table externe qui possède un champs de type char contenant en fait un nombre d'habitants. Ne me demandez pas pourquoi, mais ce nombre est donné comme ceci: 123456789,00

    Je veux créer une table a partir de ma table externe, qui prends ce champs en le transformant en Number.

    Je me suis dit que ceci pouvait faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO ma_table ( champ1, nbhabitants)
    SELECT champ1, (to_number(replace(nbhabitants,',','.'),'99999999999.99')) as nbhabitants from ma_table_externe;
    Il me renvoie cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT champ1, (to_number(replace(nbhabitants,',','.'),'99999999999.99')) as nbhabitants from ma_table_externe;
                              *
    ERREUR à la ligne 2 :
    ORA-01722: invalid number
    Si je teste le select seul, il ne fonctionne pas avec le number, mais il me retourne bien 123456789.00 si je ne fais que le replace.

    Savez vous ce qui peut être la cause de ce problème?

    Merci de votre réponse

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    J'ai peut être trouvé la cause du problème:

    Je tente de lui dire to_number(123..., ...) au lieu de to_number('123...',...)

    Mais je n'arrive pas à concaténer avec des ' mon char, et il ne comprends pas "'" || nbhabitants!!!

    De l'aide svp!

  3. #3
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Modifiez plutôt vos paramètres NLS de façon à ce que le séparteur décimal soit correctement interprété au lieu de faire un usine à gaz qui sera lente, difficile à maintenir, illisible et potentiellement source de bugs !

    Oracle a prévu la gestion des séparateurs. Utilisez-les !

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Moi je veux bien, mais j'ai pas les droits pour modifier oracle.ini, meme un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_NUMERIC_CHARACTERS='.,';
    ne marche pas!


    je ne comprends pas pourquoi il ne fonctionne pas!

  5. #5
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    marche pas.... ben voyons.. c'est très explicite !! :S

    quel est le code erreur ?

    que donne

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    le résultat de la requête que tu viens de me donner donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
           9/2
    ----------
           4.5
     
    1 ligne sélectionnée.

    par contre, j'ai testé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT to_number('100,00','999.99') FROM dual;
    il me retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT to_number('100,00','999.99') FROM dual
                     *
    ERREUR à la ligne 1 :
    ORA-01722: invalid number
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT to_number('100.00','999.99') FROM dual;
    il me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TO_NUMBER('100.00','999.99')
    ----------------------------
                             100
     
    1 ligne sélectionnée.

    Le truc, c'est que si mon to number est sur 999,99, ca me transforme en entier fois 100 :/

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2009, 19h40
  2. Comment faire un test sur "" ?
    Par magic8392 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/09/2005, 14h19
  3. Réponses: 9
    Dernier message: 13/08/2005, 12h19
  4. [VB.NET] [PPC] Comment faire un formulaire sur pls pages?
    Par papy27 dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 03/06/2004, 17h23
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31

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