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 :

Oracle SQL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Par défaut Oracle SQL
    Juste faire une comparaison des requêtes suivantes sur des tables contenant des valeurs nulles

    SELECT *
    FROM NOM_TABLE
    WHERE NOM_COLONNE = NVL(:BIND_VARIABLE, NOM_COLONNE)

    ET

    SELECT *
    FROM NOM_TABLE
    WHERE ( NOM_COLONNE = :BIND_VARIABLE OR :BIND_VARIABLE IS NULL )

    si la colonne spécifiée dans NOM_COLONNE contient des valeurs nulles ont peut avoir des surprises !!!!!!!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Que cherches-tu à montrer ?

    On obtient des résultats différents seulement si BIND_VARIABLE est nulle, puisque la contition :BIND_VARIABLE IS NULL est toujours vérifiée, donc la deuxième requète revient à faire un select * sans clause where...

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Par défaut voila
    Exactement ça

    si la bind_variable est nulle et qu'on a la colonne qui contient des valeurs nulles, on aura des différences

    Dans les forums on cite beaucoup le NVL(:BIND_VARIABLE,COLONNE), mais il faut juste preter attentions aux valeurs nulles

  4. #4
    Invité
    Invité(e)
    Par défaut
    on utilise plutôt NVL(COLONNE,:BIND_VARIABLE) non ?

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Par défaut tout dépends de ce que tu veux avoir
    Si tu veux que ta requête ramènes aussi les rangées contenant des valeurs nulles il serait mieux d'utiliser :
    nom_colonne = :bind_variable or :bind_variable is null

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par smirlou Voir le message
    Si tu veux que ta requête ramènes aussi les rangées contenant des valeurs nulles il serait mieux d'utiliser :
    nom_colonne = :bind_variable or :bind_variable is null
    Tu veux dire :
    nom_colonne = :bind_variable or nom_colonne is null

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Par défaut

    Des requettes différentes donnent des résultats différents. C'est plutôt une bonne nouvelle !

    Tout vient du fait que NULL = NULL est toujours faux, tout comme NULL != NULL est toujours faux. Quand on sait ça, il n'y a pas de surprise.

    Sachant ça, il faut écrire la requette qui correspond à la question qu'on se pose. Il n'y a pas de requette "fausse" dans l'absolu (sauf syntaxiquement), il n'y a que des requettes qui correspondent au probleme fonctionnelle posé et d'autres qui n'y réponde pas.

    Les 2 requettes du premier post répondent à des questions différentes.

    La premiere ramene toutes les lines de la table sauf celle ou la colonne est null si la bind variable est null, celle correspondantes à la bind variable sinon.

    La seconde ramene toute les lignes de la table (y compris celle ou la colonne est null) si la bind variable est null, sinon, celle s qui correspondent à la bind variable.

Discussions similaires

  1. [Oracle SQL] Savoir si un enreg est bloqué
    Par AnneC dans le forum Oracle
    Réponses: 4
    Dernier message: 26/02/2008, 13h40
  2. oracle,sql server et my sql
    Par latitude dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 01/03/2005, 09h24
  3. conflit oracle sql server ?
    Par skaii dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 10/02/2005, 18h28
  4. [ORACLE][SQL] procedure sous delphi avec une requete SQL
    Par nivet dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/11/2004, 13h43
  5. Connexion SGBD Oracle-SQL langage C/C++
    Par K2004 dans le forum Interfaces de programmation
    Réponses: 4
    Dernier message: 10/02/2004, 19h01

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