我正在阅读一些PL / SQL文档,我发现PL / SQL中的NULL
是不确定的。
换句话说:
x := 5;
y := NULL;
...
IF x != y THEN -- yields NULL, not TRUE
sequence_of_statements; -- not executed
END IF;
该语句不会评估为true,因为y的值是未知的,因此不知道是x != y
。
除了上面提到的事实,我没有找到太多信息,以及如何在PL / SQL中处理这个问题。我想知道的是,什么时候会这样有用?
答案 0 :(得分:3)
这是三值逻辑,请参阅http://en.wikipedia.org/wiki/Three-valued_logic,以及 - { - 3}}中的 - 特定于SQL。
它遵循以下概念:NULL
值表示:此值当前未知,并且可能在将来填充某些内容。因此,行为的定义方式在未来非空值的所有情况下都是正确的。 E. g。 true or unknown
是true
,因为 - unknown
(这是NULL
的真值)稍后会被真实的东西或虚假的东西取代,结果将是true
。但是,true and unknown
为unknown
,因为如果unknown will later be replaced by a true value, while it will be false, if the
unknown`稍后会被错误替换,结果将为真。
最后,这种行为不是“非确定性的”,因为结果定义得很好,并且每次执行都会得到相同的结果 - 这是定义上的确定性。它的定义方式比大多数其他编程语言中使用的标准布尔值两值逻辑稍微复杂一些。非确定性函数将是dbms_random.random
,因为它在每次调用时返回一个不同的值,甚至是SYSTIMESTAMP
,如果多次调用它也会返回不同的值。
答案 1 :(得分:0)
你可以在Wikipedia中找到很好的解释为什么引入NULL以及更多。
在PL / SQL中,您通过
处理NULLIS (NOT) NULL
作为比较,当您想要测试NULL COALESCE
和NVL
函数时,如果要将NULL替换为其他内容,例如此处IF NVL(SALARY, 0) = 0