if not (i_ReLaunch = 1 and (dt_enddate is not null))
在 Oracle 10g 中如何评估此表达式
当i_ReLaunch = null
的输入值且dt_enddate
的值不为null时
它正在进入循环。
根据普通 c# 中的规则,它不应该进入循环
其值如下。
If( not(假和(真))
= 如果不是(假)
=if( true)
这意味着它应该进入循环
但这并没有发生
如果我在任何地方错了,有人可以告诉我吗
最佳答案
Oracle 中带有 NULL 值的 boolean 运算返回 UNKNOWN
- 不是 true 或 false。所以你有这样的东西:
If( not(UNKNOWN and (true)) = if not( UNKNOWN) =if( UNKNOWN )
在这种情况下,IF
会将 UNKNOWN 视为 false。
如果i_relaunch
可以为空,那么您需要使用一些NULL处理函数(NVL,NVL2,NULLIF,COALESCE,LNNVL
)来确保您有正确结果。
请参阅以下文章了解更多信息:
- Nulls: Nothing to Worry About
- Fundamentals of PL/SQL 。向下滚动到 -
处理比较和条件语句中的空值
关于oracle - Oracle 10g 如何计算 boolean 表达式中的 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2692046/