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 8i] Type d'une variable


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut [Oracle 8i] Type d'une variable
    bonjour

    je cherche une fonction donnant le type de la variable, ou bien les fonctions renvoyant un booléen pour chaque type
    qqch comme 'is_char' ou 'is_number'...

    je n'ai pas trouvé, z'avez une idée?

    merki

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    peut-être dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL> select dump('Hello') from dual;
    DUMP('HELLO')
    --------------------------------
    Typ=96 Len=5: 72,101,108,108,111
    avec 1=varchar2, 2=number, 8=long, 12=date, 13=date, 23=raw, 24=long raw,69=rowid, 96=char, 100=binary_float, 101=binary_double, 112=clob, 113=blob, 114=bfile, 115=cfile, 178=time, 179=time with tz, 180=timestamp, 181=timestamp with tz, 182=interval y2m, 183=interval d2s, 208=urowid, 231=timestamp with local tz

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    par contre, si tu veux savoir si la chaine '123' contient un nombre, tu dois écrire ta fonction.

    tu peux jouer avec les exceptions pour écrire ton is_number, mais ce n'est algorythmiquement parlant pas très élégant.

    moi j'ai déjà employé des trucs du style

    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
     
     
    SQL> select decode(translate(c,'x0123456789','x'),
    null,decode(c,null,null,'ENTIER-POSITIF'),'CHAINE') 
    from (select '&chaine' c from dual);
    Enter value for chaine: x
    DECODE
    ------
    CHAINE
     
    SQL>  select decode(translate(c,'x0123456789','x'),
    null,decode(c,null,null,'ENTIER-POSITIF'),'CHAINE') 
    from (select '&chaine' c from dual);
    Enter value for chaine: 123
    DECODE(TRANSLA
    --------------
    ENTIER-POSITIF
    voire avec REGEXP en 10g pour des validations plus avancées

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par laurentschneider
    voire avec REGEXP en 10g pour des validations plus avancées
    Oui, d'autant que c'est déjà "tout prêt" avec la balise [:digit]

    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
    10g SOC5> select inconnue
      2  from dvp;
     
    INCONNUE
    -------------------------
    12A
    12500
       456
     
    3 ligne(s) sélectionnée(s).
     
    10g SOC5> select inconnue
      2  from dvp
      3  where regexp_like (inconnue, '^[[:digit:]]+$');
     
    INCONNUE
    -------------------------
    12500
     
    1 ligne sélectionnée.

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    ou pour des nombres , pas forcément entiers positifs ...

    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
     
    SQL> select * from 
    (select '&chaine' c from dual)
    where 
    regexp_replace(c,'^[+-]?([[:digit:]]+(\.[[:digit:]]+)?|\.[[:digit:]]+)([eE][+-]?[[:digit:]]+)?$') 
    is null;
    Enter value for chaine: xxx
     
    no rows selected
     
    SQL> /
    Enter value for chaine: -12.34E-56
    C
    ----------
    -12.34E-56

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    D'ailleurs Laurent, pourrais-tu m'expliquer ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    10g SOC5> r
      1  select regexp_instr(inconnue, '[:digit:]'), inconnue
      2* from dvp
     
    REGEXP_INSTR(INCONNUE,'[:DIGIT:]') INCONNUE
    ---------------------------------- -------------------------
                                     0 12A
                                     0 12500
                                     0    456
                                     0 5
     
    4 ligne(s) sélectionnée(s).
    Pourquoi est-ce qu'il n'y a aucune correspondance tant que je n'utilise pas le symbole '*' ou '+', etc. ?

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

Discussions similaires

  1. [c++] contrôle du type d'une variable
    Par TERRIBLE dans le forum C++
    Réponses: 2
    Dernier message: 10/04/2006, 20h50
  2. determiner le type d'une variable
    Par Mokhtar BEN MESSAOUD dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2006, 17h11
  3. [VBA-E]Renvoyer le type d'une variable
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2006, 18h07
  4. Connaitre le type d'une variable
    Par mic79 dans le forum Langage
    Réponses: 2
    Dernier message: 04/01/2006, 15h42
  5. Changer el type d'une variable sql sous postgre8/admin
    Par smag dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/08/2005, 12h31

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