0

I was reading some PL/SQL documentation, and I am seeing that NULL in PL/SQL is indeterminate.

In other words:

x := 5;
y := NULL;
...
IF x != y THEN  -- yields NULL, not TRUE
   sequence_of_statements;  -- not executed
END IF;

The statement would not evaluate to true, because the value of y is unknown and therefore it is unknown if x != y.

I am not finding much info other than the facts stated above, and how to deal with this in PL/SQL. What I would like to know is, when would something like this be useful?

4

2 回答 2

3

这是三值逻辑,请参阅http://en.wikipedia.org/wiki/Three-valued_logic,并且 - 特定于 SQL - 在http://en.wikipedia.org/wiki/Null_(SQL)中。

它遵循一个NULL值意味着的概念:这个值目前是未知的,将来可能会被一些真实的东西填充。因此,行为的定义方式在未来非空值的所有情况下都是正确的。例如。true or unknowntrue,因为 - 无论unknown(这是 的真值NULL)稍后是否会被真实或虚假的东西替换,结果将是true。但是,true and unknownis unknown,因为如果unknown will later be replaced by a true value, while it will be false, if theunknown` 稍后将被错误的东西替换,结果将为 true。

最后,这种行为不是“非确定性的”,因为结果定义明确,并且每次执行都会得到相同的结果——根据定义,这是确定性的。它只是以比大多数其他编程语言中使用的标准布尔二值逻辑更复杂的方式定义。一个非确定性函数将是dbms_random.random,因为它每次调用时都会返回一个不同的值,或者甚至SYSTIMESTAMP,如果多次调用它也会返回不同的值。

于 2013-08-29T15:47:56.023 回答
0

您可以在Wikipedia中找到很好的解释为什么要引入 NULL 以及更多内容。

在 PL/SQL 中,您通过以下方式处理 NULL

  • IS (NOT) NULL用作比较,当您想针对 NULL 进行测试时
  • 使用COALESCENVL函数,当你想用其他东西替换 NULL 时,比如这里IF NVL(SALARY, 0) = 0
于 2013-08-29T17:05:56.467 回答