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 :

Conversion de varchar en number


Sujet :

PL/SQL Oracle

  1. #1
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Conversion de varchar en number
    Bonjour,

    Je viens de me faire avoir comme un bleu, j'ai une table qui contient des varchar2, dans une colonne ces varchar2 doivent être convertis en number
    donc j'utilise To_number() . Mais comme j'utilise un DBMS_JOB tout bloquait but why me dis-je ?

    en fait mon joyeu utilisateur en montant ces tests recettes à mis des "lettres" A, B etc a la place des nombres , donc il me faut une nouvelle fonction pour traiter le cas ....

    CAST ??? je suis en 9i donc pas de REGEXP

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  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
    tu peux éventuellement faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(UPPER(col), LOWER(col), TO_NUMBER(col), '*** ERROR ***')
    si majuscule = minuscule t'es à peu près sûr que c'est un nombre aux caractères spéciaux près

    Sinon, tu te fais une fonction is_number et tu l'utilises de la même manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(is_number(col), 1, TO_NUMBER(col), '*** ERROR ***')

  3. #3
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Bonjour,
    Bonjour,

    Je crois que je vais passer par une procédure stockée java, je viens de le faire pour un regex. en tout cas, vivement la 10G, je te remercie pour tes remarques , elles sont toujours très pertinente.

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  4. #4
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Java à mon aide
    Bonjour,

    Voila un moyen d'avoir des regex en 9i PLSQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import java.util.regex.*;
     
    /**
     * @author nathieb
     */
    public class Isnumber{
     
        public static boolean IsnumberValid(String data){
            final String REGEX="\\d+";
            Pattern pattern = Pattern.compile(REGEX);
            Matcher matcher = pattern.matcher(data);
            return matcher.matches();
        }
    + un loadjava par derrière et pouf
    et enfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE FUNCTION IsNumber(data VARCHAR2)
    RETURN BOOLEAN
    AS LANGUAGE JAVA
    NAME 'Isnumber.IsnumberValid(java.lang.String) return java.lang.Boolean';
    /
    Java + PLSQL de la balle
    voila il me faut tester ...

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  5. #5
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Bonjour
    Re bonjour,

    Délire appel moi ouf , en 9i on est encore en jdk1.2
    donc pas de java.util.regex.***

    Oracle je t'adore ....

    je bascule donc sur le forum java


    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par orafrance Voir le message
    tu peux éventuellement faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(UPPER(col), LOWER(col), TO_NUMBER(col), '*** ERROR ***')
    si majuscule = minuscule t'es à peu près sûr que c'est un nombre aux caractères spéciaux près

    ...
    Fausse Bonne Idée
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0 
    Connected as mni
     
     
    SQL> 
    SQL> With Data As (
      2    Select '10E2' col from dual
      3  )
      4  Select Decode(Upper(col), Lower(col), To_Number(col), '*** ERROR ***')
      5    From Data
      6  ;
     
    With Data As (
      Select '10E2' col from dual
    )
    Select Decode(Upper(col), Lower(col), To_Number(col), '*** ERROR ***')
      From Data
     
    ORA-01722: Nombre non valide
     
    SQL> 
    SQL> With Data As (
      2    Select '10E2' col from dual
      3  )
      4  Select Decode(Upper(col), Lower(col), To_Number(col), -1)
      5    From Data
      6  ;
     
    DECODE(UPPER(COL),LOWER(COL),T
    ------------------------------
                                -1
     
    SQL> 
    SQL> With Data As (
      2    Select '10E2' col from dual
      3  )
      4  Select To_Number(col)
      5    From Data
      6  ;
     
    TO_NUMBER(COL)
    --------------
              1000
     
    SQL>

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Voici des autres solutions a ce type de problème proposeés par Laurent Schneider (qui semble ne plus avoir du temps pour le forum ces jours).

  8. #8
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Bonjour
    Bonjour,

    Je viens de résoudre le problème, java c'était bien mais trop compliqué et risqué d'aller chercher une bibli jar à importer dans le projet.
    Donc merci monsieur "mnitu", pour ton lien, je traite le pb avec les exceptions
    c'est simple et efficace .

    C'est bien expliqué sur le lien que vous m'avez fourni.
    la fonction TO_NUMBER() lèce une exception si le format est incorrect genre je passe un "A".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    EXCEPTION
        WHEN OTHERS
                  Insert into .... mon erreur dans mon tableau d'erreur
                  return false; pour le contrôle

    olivier.
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

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

Discussions similaires

  1. Conversion VARCHAR to NUMBER
    Par wissem.ba dans le forum SQL
    Réponses: 5
    Dernier message: 17/02/2011, 08h02
  2. Conversion varchar en number
    Par nabelou1 dans le forum SQL
    Réponses: 12
    Dernier message: 15/05/2008, 17h59
  3. [Oracle 9] Conversion d'un format number en heure
    Par Rycku dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2006, 11h48
  4. Problème Conversion REAL --> VARCHAR
    Par YOYOVbSQL dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2006, 18h03
  5. Conversion de varchar en float possible ?
    Par toyyo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 17h05

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