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 :

teste une valeur qui peut etre nulle avec une autre valeur


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut teste une valeur qui peut etre nulle avec une autre valeur
    oracle 9i, compilation sous unix, teste sous pl/sql developper

    bonjour,
    :o
    mon problème du jour est comme suite, dans une table j'ai un champ (flag) qui peut etre null,

    ma requete qui fait SELECT

    SELECT pays, tel
    FROM ma_table m
    WHERE m.flg <> 'N';

    par exemple (elle est plus complique que ), je ne recoit rien dans mon select parceque le flag n'est pas renseigne, or se que je ne comprend pas c'est pourquoi quand je fais le teste "=" au lieu de "<>" cela marche, cela ne renvoit rien non plus (je ne saos pas si je suis clair ou pas)

    la solution je l'ai trouve j'ai fait cela
    NVL(m.flg,'' '') <> ''N''

    et ca marche, mais moi j eveut comprendre pourquoi oracle ou sql je ne sais même pas d'ailleur qui gere cela, pourquoi il ne renvoit rien dans les deux cas.

    merci,

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : mai 2004
    Messages : 2 076
    Points : 2 329
    Points
    2 329
    Par défaut
    Rien de spécial à comprendre. C'est un choix d'Oracle. Quand il y a null, le test ne marche pas. Pareil s'il y a '' (puisque '' c'est null). On ne fait pas des
    = null
    alors on en fait pas des
    <> null
    . Il faut utiliser le test
    AND ... IS NOT NULL
    ou la fonction NVL comme tu l'as fait.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  3. #3
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    mars 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2003
    Messages : 438
    Points : 912
    Points
    912
    Par défaut
    NULL est une "valeur" un peu spéciale en Oracle. D'ailleurs, ce n'est pas une valeur comme -5, ou 10. NULL signifie en fait que rien n'a été défini.

    Pour tester un NULL, il ne faut pas utiliser l'opérateur d'égalité =, mais l'opérateur IS NULL (note : il existe aussi IS NOT NULL).

    Ta requête devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pays, tel FROM ma_table m WHERE m.flg <> 'N' or m.flag is null ;

  4. #4
    Membre habitué
    Inscrit en
    août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut
    bon ca a le merite de me prendre la tete, bon j em'améliore alors petit a petit
    merci

  5. #5
    Membre habitué
    Inscrit en
    août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut
    merci vous etes geniaux les gars
    serieusement celui qu'a eu l'idée de crée ce site ainsi que les gens qui y participe et en plus gratos (livres, tutos, code et aides) c'est une mine d'or

  6. #6
    Membre expert
    Avatar de bouyao
    Inscrit en
    janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 1 778
    Points : 3 084
    Points
    3 084
    Par défaut
    C'est juste un peut de logique

    NULL veut dire : RIEN, VIDE, on compare quelque chose avec une autre chose et non pas avec rien (NULL), donc ton test ne marchera pas.
    alors comme ils t'ont dit (nuke_y et rouardg) il faut utiliser :

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 15 967
    Points : 19 070
    Points
    19 070
    Par défaut
    Citation Envoyé par rouardg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pays, tel FROM ma_table m WHERE m.flg <> 'N' or m.flag is null ;
    On peut aussi faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pays, tel FROM ma_table m WHERE NVL(m.flag,'X') <> 'N';
    si flag est NULL X <> de N donc la condition est vérifiée

  8. #8
    Membre habitué
    Inscrit en
    août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut
    oui tout a fait j'ai essaye toutes les methodes et cela marche



    On peut aussi faire ceci :

    Code:
    SELECT pays, tel FROM ma_table m WHERE NVL(m.flag,'X') <> 'N';
    c'est bien ce code la que j'ai utilise

    merci pour tous

  9. #9
    Membre habitué
    Inscrit en
    août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut
    oui tout a fait j'ai essaye toutes les methodes et cela marche



    On peut aussi faire ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Code:
    SELECT pays, tel FROM ma_table m WHERE NVL(m.flag,'X') <> 'N';
    c'est bien ce code la que j'ai utilise

    merci pour tous

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/06/2015, 11h34
  2. INDEX sur une colonne qui peut être NULL
    Par dorian53 dans le forum Requêtes
    Réponses: 15
    Dernier message: 29/11/2007, 18h13
  3. Comment insérer une date qui peut être nulle ?
    Par guidav dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/01/2007, 17h18
  4. Réponses: 3
    Dernier message: 05/10/2006, 14h16

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