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

这怎么epression将在Oracle 10g中 进行评估时,i_ReLaunch = null的输入值和dt_enddate的值不为空 它进入循环计算NULL。 根据正常C#中的规则,所有它不应该作为 进入循环,它将如下的值。如何的Oracle 10g在布尔表达式中

If(not(false and (true)) = if not(false) =if(true)这意味着它应该进入循环

但情况并非如此

有人可以让我知道,如果我错在任何地方在Oracle中NULL值

回答

3

布尔运算返回UNKNOWN - 不是真的或假的。所以,你有这样的事情:

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

在这种情况下,IF将把UNKNOWN为假。

如果i_relaunch可以为null,那么您需要使用一些NULL处理函数(NVL, NVL2, NULLIF, COALESCE, LNNVL)来确保您有正确的结果。

请参阅以下文章了解更多信息: