[英]reading null value in NUMBER variable using SELECT INTO query, but oracle is not considering it as null. what is the value present in the variable..?
在 Oracle 过程中执行以下块
val NUMBER := 0;
BEGIN
SELECT VALIDITY / 24
INTO val
FROM validity_table
WHERE id = 123;
DBMS_OUTPUT.PUT_LINE('Validity : '||val);
IF(val = NULL)
THEN
val := 0;
DBMS_OUTPUT.PUT_LINE('Validity : '||val);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
Output:
Validity :
在validity_table中,id 123的validity_table值是null,但是在执行它时,控制不在if块内。 output 只打印一次,没有任何价值。 想知道“val”变量包含什么值。
问题不在于 Oracle(以及所有其他 RDBMS 和 SQL 标准)对 Null 的考虑,而是您对它们的误解。 Nulls 实际上引入了 3 值逻辑:任何同情的结果可能是真、假或 null。 如果这种特殊情况,比较结果(val=Null)是 Null; 由于 null 不正确,因此您的 if 条件不满足,因此未处理。 有关涉及 Null 的比较,请参见此小提琴。
太糟糕了 Oracle 还没有看到 SQL 中 boolean 值的好处。 猜猜他们认为如果 1979 年不需要它,为什么 2019 年需要它(毕竟在短短 40 年内可以改变多少)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.