2010-04-22 7 views
3
if not (i_ReLaunch = 1 and (dt_enddate is not null)) 

Comment cette epression sera évaluée dans Oracle 10g lorsque la valeur d'entrée du i_ReLaunch = null et la valeur de la dt_enddate est non nul il entre dans la boucle. Selon les règles en C# normal et tout ce qu'il ne devrait pas entrer dans la boucle comme il sera comme suit avec les valeurs.Comment Oracle 10g évalue NULL dans les expressions booléennes

If(not(false and (true)) = if not(false) =if(true) ce qui implique qu'il faut entre dans la boucle

Mais il ne se produit pas

que quelqu'un peut me faire savoir si je me trompe en tout lieu

Répondre

3

opérations booléennes avec la valeur NULL dans Oracle renvoyaient UNKNOWN - Pas vrai ou faux. Donc, vous avez quelque chose comme ceci:

If(not(UNKNOWN and (true)) = if not(UNKNOWN) =if(UNKNOWN) 

Dans ce cas, IF traitera UNKNOWN comme faux.

Si i_relaunch peut être nul, alors vous devez utiliser certaines des fonctions de manipulation NULL (NVL, NVL2, NULLIF, COALESCE, LNNVL) pour être sûr que vous avez un résultat correct.

Voir ces article pour plus d'informations: