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

  1. #1
    Membre confirmé

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    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
    Points : 4 926
    Points
    4 926
    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
    Points : 4 926
    Points
    4 926
    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 chevronné

    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
    Points : 1 775
    Points
    1 775
    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.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  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
    Points : 4 926
    Points
    4 926
    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 chevronné

    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
    Points : 1 775
    Points
    1 775
    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. ?
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  7. #7
    Membre confirmé

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    le besoin est juste de connaître le type de la variable, non le type du contenu
    je vais donc utiliser le DUMP et trier les résultats selon la valeur du 'typ'

    merci


    edit: si je veux juste le type, je dois traiter le résultat du DUMP comme une chaîne de caractères à tronquer, y a pas plus simple?

  8. #8
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    d'où vient ta variable?

    si c'est une colonne d'une table, tu as user_tab_columns.data_type, non?

  9. #9
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Magnus
    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. ?
    essaye avec [[:digit:]] au lieu de [:digit:]

  10. #10
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par laurentschneider
    essaye avec [[:digit:]] au lieu de [:digit:]
    C'est exactement ça :
    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
    10g SOC5> select *
      2  from dvp;
     
    INCONNUE
    -------------------------
    12A
    12500
       456
    5
    xxx uiop
     
    5 ligne(s) sélectionnée(s).
     
    10g SOC5> select inconnue
      2  from dvp
      3  where regexp_like(inconnue, '[[:digit:]]');
     
    INCONNUE
    -------------------------
    12A
    12500
       456
    5
     
    4 ligne(s) sélectionnée(s).
    Merci bien.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  11. #11
    Membre confirmé

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Citation Envoyé par laurentschneider
    d'où vient ta variable?

    si c'est une colonne d'une table, tu as user_tab_columns.data_type, non?
    non, je ne le sais pas à l'avance
    mais je me suis arrangé pour n'avoir que des nombres et des chaînes, que je mets dans un VARCHAR2, et comme Oracle change implicitement le type NUMBER en VARCHAR dans ce cas, je n'ai plus de pb

    merci

+ 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