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 :

[PL/SQL] curseurs et valeur Null dans la clause WHere


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut [PL/SQL] curseurs et valeur Null dans la clause WHere
    Bonjour,

    j'ai le curseur suivant

    CURSOR cCurseus(w_code IN table.CODE%TYPE,
    w_lib_nom IN table.LIB_NOM%TYPE,
    w_lib_pr1 IN table.LIB_PR1%TYPE,
    w_lib_pr2 IN table.LIB_PR2%TYPE
    ) IS
    SELECT cod_ind_opi
    FROM table
    WHERE code_opi = w_code
    AND lib_nom = w_lib_nom
    AND lib_pr1 = w_lib_pr1
    AND lib_pr2i = w_lib_pr2
    AND tem_date_nai_rel_opi = 'N';
    le probleme vient du fait que la valeur w_lib_pr2 n'est pas forcement renseigné et est parfois à NULL dans ce cas comment je fait pour que ce soit pris en compte dans la clause WHERE de mon cuseur?

    Question de novice sans doute mais si ce serait sympa de m'aider...

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Utilises NVL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND lib_pr2i = NVL(w_lib_pr2, lib_pr2i)
    Attention, si lib_pr2i est NULL, ca donnera NULL = NULL ce qui n'est jamais vrai.


    Dans ce cas faut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AND (
     ( lib_pr2i IS NOT NULL AND = NVL(w_lib_pr2, lib_pr2i))
     OR
     (lib_pr2i IS NULL AND w_lib_pr2 IS NULL )

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    merci pour la reponse je vais tester pour voir...

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    AND ( lib_pr2i = w_lib_pr2 OR w_lib_pr2 IS NULL )
    ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    j'ai fait des tests et ça marche bien...

    par contre il n'existe pas une fonction SQL qui permet de traiter ces cas?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    heu.. quelle est la difference entre les deux solutions proposées (celle de McM et celle de SheikYerbouti)

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    la mienne tient sur une ligne !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    (question debile... reponse claire...)

    mais je ne comprends toujours pas... je suis en mode butée aujourd'hui...

    lib_pr2i = w_lib_pr2 : ok c'est ce que je veux quand w_lib_pr2 est renseigné
    mais w_lib_pr2 IS NULL : oui et alors??? j'aurai plutot ecrit lib_pr2i IS NULL non???

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ( lib_pr2i = w_lib_pr2 OR w_lib_pr2 IS NULL )

    En clair, ça veut dire je veux les lignes pour lesquelles lib_pr2i = w_lib_pr2 ou toutes les lignes si w_lib_pr2 est NULL

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    nonnonnon je ne veux pqs toute les lignes si w_lib_pr2 est NULL

    en fait je veux que lib_pr2i = w_lib_pr2 quand w_lib_pr2 IS NOT NULL
    et lib_pr2i IS NULL quand w_lib_pr2 IS NULL

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ah voilà enfin clairement énoncé ce que vous voulez !

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    en effet je n'ai pas été tres claire...

    alors la meilleur solution est laquelle?

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND Nvl(lib_pr2i,'|') = Nv(w_lib_pr2,'|' )

  14. #14
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Y'a aussi le très laid mais efficace (emprunté aux bidouilleurs UNIX ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND 'X'||lib_pr2i = 'X'||w_lib_pr2
    Comme ça tu n'auras plus jamais de null ni d'un coté ni de l'autre (cependant ça désactive un éventuel index sur la colonne LIB_PR2i mais j'imagine que la condition la plus discriminante n'est pas là...)

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/10/2010, 14h50
  2. Tester valeur null dans une requête sql
    Par bobosh dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/07/2008, 13h07
  3. [SQL] Affichage des valeurs nulles dans un Count
    Par at_first dans le forum Access
    Réponses: 4
    Dernier message: 06/03/2007, 11h07
  4. Réponses: 3
    Dernier message: 10/08/2005, 11h11
  5. ASP et valeur NULL dans requêtes SQL
    Par chuck_m dans le forum ASP
    Réponses: 7
    Dernier message: 13/08/2004, 11h15

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