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 vers number [11g]


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut Problème de conversion vers number
    Bonjour,
    j'ai un problème de conversion vers un NUMBER, je comprend pas trop d'ou il vient le problème,(erreur numérique ou erreur sur une valeur erreur de conversion des caractères en chiffres)

    ma fonction permet de convertir un varchar en number ex : 1.500,36 -> 1500.36

    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
    FUNCTION CONVERT_PRICE
        (
        PRICE IN varchar2
        ) return number
        IS
        V_prix varchar2(255);
        droite varchar2(255);
        gauche varchar2(255);
        V_result Number(15,2);
        BEGIN
     
         V_prix := replace(PRICE,',','.');
     
         select replace(SUBSTR(V_prix, 1,INSTR(V_prix, '.',-1) ),'.','') into gauche from dual ;
     
         select SUBSTR(V_prix, INSTR(V_prix, '.',-1)+1) into droite from dual ;
     
        V_prix := gauche || '.' || droite;
     
        V_result:=TO_NUMBER(V_prix,'9999999999.99');
     
        return V_result;
     
        END;

    HEeeeeeeeelp please.
    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Tu ne dis pas où est ton erreur dans le message : pb de remplacement de . par , ou de , par . ou bien conversion CHAR/NUMBER KO?

    Plutôt que ton code assez long, essaye ceci : ça marchera avec ton exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select REGEXP_REPLACE(replace('1.500,36',',', '.'), '.', '', 1, 2) from dual;
    REGEXP_
    -------
    1500.36
    1 row selected.
    C'est une idée de départ mais si tu as plus de 2 . dans le nombre, ça ne passera pas... mais bon, il est tard et je dois partir
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    En repartant de l'idée de Ikebukuro et en remplaçant dans le bon ordre, ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select replace(replace('1.500,36', '.', ''), ',', '.') from dual;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Sinon, trouvé sur "docs.oracle.com" (en cherchant ce qui a un rapport avec TO_NUMBER):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TO_NUMBER ('1.500,36', '9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.''') my_number FROM DUAL
    A tester peut être ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Tu ne dis pas où est ton erreur dans le message : pb de remplacement de . par , ou de , par . ou bien conversion CHAR/NUMBER KO?

    Plutôt que ton code assez long, essaye ceci : ça marchera avec ton exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select REGEXP_REPLACE(replace('1.500,36',',', '.'), '.', '', 1, 2) from dual;
    REGEXP_
    -------
    1500.36
    1 row selected.
    C'est une idée de départ mais si tu as plus de 2 . dans le nombre, ça ne passera pas... mais bon, il est tard et je dois partir
    Bonjour Ikebukuro,
    oups non ça marche pas ton code dans le cas 129.36, en faite moi j'ai un champs char ou je peux trouver par exp: 15.200.36 ou 15.200,36 ou 15 ou 25.36 ou 25,36 ou 1.35 ou 1,35 ou 1.200.200,50 ou 1.200.200.50
    et une fois je met bien mon char dans le bon format réel je veux le convertir en number et a ce moment ça plante.

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Ce serait bien de nous donner le message d'erreur car selon toi le remplacement des . et , est OK mais c'est lors de la conversion du CHAR en NUMBER que ça plante. Il y a un code erreur Oracle?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Ce serait bien de nous donner le message d'erreur car selon toi le remplacement des . et , est OK mais c'est lors de la conversion du CHAR en NUMBER que ça plante. Il y a un code erreur Oracle?
    Bonjour
    ci dessous l'erreur
    ORA 06502 : PL/SQL erreur numerique ou erreur sur une valeur.
    Merci

  8. #8
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Citation Envoyé par perrotta Voir le message
    Bonjour
    ci dessous l'erreur
    ORA 06502 : PL/SQL erreur numerique ou erreur sur une valeur.
    Merci
    Bonjour,
    Et mon "to_number" avec les NLS_NUMERIC_CHARACTERS ne fonctionne pas dans ton cas ?
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Bonjour,
    Et mon "to_number" avec les NLS_NUMERIC_CHARACTERS ne fonctionne pas dans ton cas ?
    Bonjour Sunchaser,
    non avec ta formule j'obtient pas ce que je veux, exemple : 1.500.36 me donne pas 1500.36

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Citation Envoyé par perrotta Voir le message
    ma fonction permet de convertir un varchar en number ex : 1.500,36 -> 1500.36
    Citation Envoyé par perrotta Voir le message
    1.500.36 me donne pas 1500.36
    Dans les données à convertir, le séparateur décimal est la virgule ou le point ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Dans les données à convertir, le séparateur décimal est la virgule ou le point ?
    c'est le point.

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Donc l'exemple dans le premier message était erroné ?

    Y a-t-il toujours le même nombre de décimales ? Combien ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    oui,
    non, yen a pas le même nombre de décimales.

  14. #14
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Y a-t-il toujours au moins une décimale ?
    Sinon comment peux-tu savoir si 123.456 vaut 123456,00 et pas 123,456 ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    123.456 vaut toujours 123,456, si vous voyez mon code je récupère la partie droite et la partie gauche après je concatène,
    mon problème c'est que j'ai un champs prix en varchar et les users saisissent le prix une fois avec la virgule et une fois avec des points,
    donc je veux convertir le résultat en number pour calculer la différence avec un autre champs.

  16. #16
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Citation Envoyé par perrotta Voir le message
    j'ai un champs prix en varchar et les users saisissent le prix une fois avec la virgule et une fois avec des points
    Et si un utilisateur décide d'utiliser un autre caractère de son choix pour séparer les décimales ? Tu fais comment ?
    C'est là que se trouve le problème.
    La saisie doit être vérifiée, elle doit correspondre à un format imposé, et les montants doivent être enregistrés dans des colonnes NUMBER.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    non l'utilisateur utilise soit le point soit la virgule comme séparateur.
    et je ne peut pas modifier la colonne en number.
    en tout cas Merci pour ton aide

  18. #18
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    C'est quand même au moment de la saisie que le format du nombre doit être converti de manière à être homogène dans la base de données.
    Tu vas trainer ton problème de format dans tous tes traitements alors qu'il serait tellement simple de le figer une fois pour toutes.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    apparemment ta raison al1_24, les utilisateurs ajoute des fois des espaces ex: 1 500.60 au lieu 1500.36
    et a ce moment la que ça plante.
    Grazie mille

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

Discussions similaires

  1. [2008R2] Problème de conversion vers type Numeric
    Par nazimb dans le forum SSIS
    Réponses: 6
    Dernier message: 30/09/2012, 16h29
  2. [FOP] Problème de conversion xml/xsl vers pdf
    Par Shadow aok dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/03/2006, 10h41
  3. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37
  4. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42
  5. [VB.net]problème de conversion de code c# vers VB.net
    Par cladsam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/10/2005, 14h07

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