Oracle 10g 如何计算布尔表达式中的 NULL

发布于 2024-08-30 08:58:50 字数 325 浏览 2 评论 0原文

if not (i_ReLaunch = 1 and (dt_enddate is not null))

Oracle 10g 中如何评估此表达式 当i_ReLaunch = null的输入值且dt_enddate的值不为null时 它正在进入循环。 根据普通 c# 中的规则,它不应该进入循环 其值如下。

If( not(假和(真)) = 如果不是(假) =if(true) 这意味着它应该进入循环

但它没有发生

有人可以让我知道我是否在任何地方错了

if not (i_ReLaunch = 1 and (dt_enddate is not null))

How this epression will be evaluated in Oracle 10g
when the input value of the i_ReLaunch = null and the value of the dt_enddate is not null
it is entering the loop.
According to the rules in normal c# and all it should not enter the loop as
it will be as follows with the values.

If( not(false and (true))
= if not( false)
=if( true)
which implies it should enters the loop

But it is not happening

Can someone let me know if i am wrong at any place

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

芯好空 2024-09-06 08:58:50

Oracle 中具有 NULL 值的布尔运算返回 UNKNOWN - 不是 true 或 false。所以你有这样的情况:

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

在这种情况下,IF 会将 UNKNOWN 视为 false。

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

有关详细信息,请参阅以下文章:

Boolean operations with NULL value in Oracle return UNKNOWN - not true or false. So you have something like this:

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

In this case, IF will treat UNKNOWN as false.

If i_relaunch can be null, then you need to use some of NULL handling functions(NVL, NVL2, NULLIF, COALESCE, LNNVL) to be sure that you have correct result.

See these article for more information:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文