Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/12/2006, 13h31   #1
Invité régulier
 
Inscription : 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 : 8
Points : 8
Par défaut [PL/SQL] curseurs et valeur Null dans la clause WHere

Bonjour,

j'ai le curseur suivant

Citation:
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...
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 13h45   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 448
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 448
Points : 4 194
Points : 4 194
Utilises NVL
Code :
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 :
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 )
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 13h47   #3
Invité régulier
 
Inscription : 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 : 8
Points : 8
merci pour la reponse je vais tester pour voir...
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 14h06   #4
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Code :
1
2
3
4
 
...
AND ( lib_pr2i = w_lib_pr2 OR w_lib_pr2 IS NULL )
...
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 14h16   #5
Invité régulier
 
Inscription : 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 : 8
Points : 8
j'ai fait des tests et ça marche bien...

par contre il n'existe pas une fonction SQL qui permet de traiter ces cas?
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 14h19   #6
Invité régulier
 
Inscription : 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 : 8
Points : 8
heu.. quelle est la difference entre les deux solutions proposées (celle de McM et celle de SheikYerbouti)
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 14h19   #7
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
la mienne tient sur une ligne !
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 14h24   #8
Invité régulier
 
Inscription : 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 : 8
Points : 8
(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???
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 14h50   #9
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Code :
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
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 15h05   #10
Invité régulier
 
Inscription : 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 : 8
Points : 8
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
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 15h07   #11
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Ah voilà enfin clairement énoncé ce que vous voulez !
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 15h13   #12
Invité régulier
 
Inscription : 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 : 8
Points : 8
en effet je n'ai pas été tres claire...

alors la meilleur solution est laquelle?
etoileDesNeiges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 15h22   #13
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Code :
1
2
 
AND Nvl(lib_pr2i,'|') = Nv(w_lib_pr2,'|' )
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 16h58   #14
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Y'a aussi le très laid mais efficace (emprunté aux bidouilleurs UNIX ):

Code :
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à...)
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h25.


 
 
 
 
Partenaires

Hébergement Web