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

SQL Oracle Discussion :

"IS NULL" et "= NULL"


Sujet :

SQL Oracle

  1. #1
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut "IS NULL" et "= NULL"
    Bonjour,

    J'ai une requete avec une dans la clause

    WHERE TOTO IS NULL

    dans ce cas l'optimiser ne veux pas utiliser l'indexe sur la colonne TOTO

    Par contre si je fais

    WHERE TOTO = NULL

    Il utilise bien l'indexe.

    J'ai donc deux questions :

    Y a t il une diffrénce entre IS NULL et = NULL. Moi, je n'en vois pas.

    Y a t il une solution pour qu'Oracle utilise un indexe sur une colonne avec une clause IS NULL.

    Par avance

    Merci,

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Oui il y a une différence -> col = NULL n'est jamais vérifié puis NULL est incomparable. Comme le dit l'adage : "NULL est tellement nul qu'il n'est même pas égale à lui même"

  3. #3
    Membre Expert 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
    Par défaut
    Dans le cas du =null, l'index doit être utilisé mais la requête ne renvoie rien non ?

  4. #4
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Par défaut
    Citation Envoyé par Fred_D
    Oui il y a une différence -> col = NULL n'est jamais vérifié puis NULL est incomparable. Comme le dit l'adage : "NULL est tellement nul qu'il n'est même pas égale à lui même"

    excellent. J'adore ta citation

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Par défaut
    Bonjour,

    Je fais remonter ce topic, pour éviter d'en créer un nouveau.

    Je veux faire un curseur avec un certains nombres de parametres.
    La requête ressemblerait à quelque chose comme ça :

    SELECT ... FROM ... WHERE col1 = arg1 AND col2 = arg2 AND ....
    ou arg1, arg2 sont les paramètres de mon curseur.

    Si un de mes arguments est NULL, je me retrouve donc dans la situation du =NULL. Donc le résultat de la requête est faux.

    Comment faire pour contourner ce problème ?

    Merci.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Utiliser NVL ou un OR, ou faire en dynamique.

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