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 :

Colonne de type varchar2 et comparaison d'un nombre


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Par défaut Colonne de type varchar2 et comparaison d'un nombre
    Bonjour,

    Je suis sur une base Oracle10g.

    J'ai une table avec une colonne qui contient soit des caractères, soit des nombres. Ex :

    Col_type | Col_valeur

    CARACT | toto
    NUM | 120
    NUM | 1180
    CARACT | tutu

    Mon problème est la requête suivante :

    select 1 from maTable where Col_type = 'NUM' and Col_valeur <= '120'

    Qui me ramène 2 lignes car '1180' < '120' en mode caractères.

    Le problème est que si je rajoute un to_number(Col_valeur) il plante en disant que le nombre est invalide car j'ai aussi des caractères dans cette colonne (malgré la restriction sur Col_type = 'NUM').

    Avez-vous une idée de comment contourner cela ?

    Merci.

  2. #2
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Bonjour,

    A mon avis le mieux est d'avoir 2 colonnes différentes.

    Sylvain

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Par défaut
    essaye avec cette requete
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select 'x' 
    from (select * from maTable where Col_type = 'NUM')
    where to_number(Col_valeur) <= 120

  4. #4
    Expert confirmé 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
    Par défaut
    J’aurais tendance à créer une vue qui devrait cacher ce modèle un peu fantaisiste:
    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
     
    Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0 
    Connected as mni
     
    SQL> 
    SQL> create table t_uni
      2  (
      3    col_type varchar2(10),
      4    col_val  varchar2(100)
      5  )
      6  /
     
    Table created
    SQL> insert into t_uni
      2  select 'CARACT' col_type, 'toto' col_val from dual union all
      3  select 'NUM' , '120' from dual union all
      4  select 'NUM' , '1180' from dual union all
      5  select 'CARACT', 'tutu' from dual
      6  /
     
    4 rows inserted
    SQL> commit
      2  /
     
    Commit complete
    SQL> create view v_dif as
      2  Select case when col_type = 'CARACT' Then col_val Else Null end val_char,
      3         case when col_type = 'NUM' Then to_number(col_val) Else Null end val_num
      4    from t_uni
      5  /
     
    View created
    SQL> select 1
      2  from v_dif
      3  Where val_num <= 120
      4  /
     
             1
    ----------
             1
     
    SQL>

  5. #5
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Ca ca devrait marcher
    select 1 from
    (select col_valeur from table where col_type='NUM')
    where to_number(col_valeur)<=120

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 1 from table where to_number(decode(col_type,'NUM', col_valeur)) <= 120;

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2009, 13h14
  2. Réponses: 14
    Dernier message: 28/10/2005, 18h41
  3. Réponses: 5
    Dernier message: 19/04/2005, 09h46
  4. colonnes de type auto incremental
    Par Bill_Baroud dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/12/2004, 12h28
  5. requete vers une colonne de type datetime
    Par Zorgz dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2003, 12h37

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