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 :

[PL/SQL 9i] Tester le type d'une donnée


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut [PL/SQL 9i] Tester le type d'une donnée
    Bonjour à tous
    J'ai une table avec des champs en VARCHAR2.
    Existe t'il une méthode en PL/SQL pour tester si le VARCHAR2 retourné peut être convertit en NUMBER.
    En fait, je dois convertir certain VARCHAR en NUMBER...Les données étant brutes, il se peux que certaines lignes comportent des erreurs...je souhaiterais donc tester si le transtypage est réalisable...
    Si quelqu'un a une piste, merci d'avance!
    La naissance est le seul fruit du hasard

  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 faire des REPLACE pour supprimer les caractères spéciaux et vérifier que la chaine en minuscule est bien différente des majuscules... sinon faire ceci mais j'aime pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION ISNUMBER (LC$A_TESTER VARCHAR2) 
    RETURN NUMBER
    dummy NUMBER;
    BEGIN
    dummy := TO_NUMBER(LC$A_TESTER);
     
    RETURN 1;
    EXCEPTION WHEN OTHERS THEN
    RETURN 0;
    END;
    /

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut
    Merci pour cette réponse rapide...
    Je test ca!
    La naissance est le seul fruit du hasard

  4. #4
    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
    Voila une version plus "classe"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE FUNCTION ISNUMBER (LC$A_TESTER VARCHAR2) 
    RETURN NUMBER
    dummy NUMBER;
     
    PRAGMA EXCEPTION_INIT(INVALID_NUMBER, -1722);
    BEGIN
    dummy := TO_NUMBER(LC$A_TESTER);
     
    RETURN 1;
    EXCEPTION WHEN INVALID_NUMBER THEN
    RETURN 0;
    END;
    /
    je ne rejette QUE l'erreur invalid number et pas others

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Allez, juste pour pinailler, il me semble qu'une fonction retournant un boolean serait encore plus simple à utiliser...

    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  6. #6
    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
    En effet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE FUNCTION ISNUMBER (LC$A_TESTER VARCHAR2)
    RETURN BOOLEAN
    dummy NUMBER;
     
    PRAGMA EXCEPTION_INIT(INVALID_NUMBER, -1722);
    BEGIN
    dummy := TO_NUMBER(LC$A_TESTER);
     
    RETURN TRUE;
    EXCEPTION WHEN INVALID_NUMBER THEN
    RETURN FALSE;
    END;
    /
    Et c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If isnumber('1234') Then ...
    spice de pinailleur

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut
    Merci de pinailler! lool
    Merci aussi de votre aide, je vais mettre ca en place!
    La naissance est le seul fruit du hasard

  8. #8
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par SheikYerbouti
    Allez, juste pour pinailler, il me semble qu'une fonction retournant un boolean serait encore plus simple à utiliser...

    SheikYerbouti tu me fait penser à quelque chose. Si tu créés une fonction qui retourne un boolean, celle ci est inutilisable en SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> select isnumber('TOTO') from dual;
    select isnumber('TOTO') from dual
           *
    ERREUR à la ligne 1 :
    ORA-06552: PL/SQL: Statement ignored
    ORA-06553: PLS-382: expression du mauvais type
    y'a t il un moyen de contourner ca sans faire une nouvelle fonction qui convertit un boolean en number ou je sais quoi ?

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Très juste elle est adaptée pour du code PL/SQL.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  10. #10
    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
    j'ai corrigé la fonction (que j'aurais dû tester ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION ISNUMBER (LC$A_TESTER VARCHAR2) 
    RETURN BOOLEAN is
    dummy NUMBER;
    INVALID_NUMBER EXCEPTION;
    PRAGMA EXCEPTION_INIT(INVALID_NUMBER, -6502);
    BEGIN
    dummy := TO_NUMBER(LC$A_TESTER);
    RETURN TRUE;
    EXCEPTION WHEN INVALID_NUMBER THEN
    RETURN FALSE;
    END;
    /
    sygale dans ce cas, il vaut mieux retourner un NUMBER

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut
    Parfait, ca fonctionne nickel!
    J'avais apporté les corrections
    La naissance est le seul fruit du hasard

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

Discussions similaires

  1. SQL : Tester le type d'une donnée
    Par pekka77 dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 05/05/2009, 10h56
  2. Tester le type d'une donnée
    Par tiferg dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/03/2009, 18h58
  3. Tester le type d'une variable
    Par mzt.insat dans le forum Linux
    Réponses: 5
    Dernier message: 30/05/2006, 18h37
  4. tester le type d'une chaine
    Par molesqualeux dans le forum C
    Réponses: 33
    Dernier message: 03/02/2006, 08h47
  5. tester le type d'une valeur saisie
    Par lalaurie40 dans le forum C
    Réponses: 1
    Dernier message: 09/10/2005, 21h52

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