繁体   English   中英

使用 SELECT INTO 查询读取 NUMBER 变量中的 null 值,但 oracle 不认为它是 Z37A6259CC0C1DAEFF299 变量中存在的值是什么..?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM