NO_DATA_FOUND,SELECT COUNT(*)INTO var和var IS NULL对触发器的澄清

时间:2011-06-21 13:57:54

标签: oracle plsql

我读到SELECT不会检索任何数据会生成NO_DATA_FOUND

但根据我的经验,这不是真的,因为我做了:

SELECT COUNT(*) INTO mylocalvar FROM tbl;

在空表上,它没有启动NO_DATA_FOUND异常。

相反,我发现mylocalvarNULL 我将其排除在= 0之外,但它是NULL

所以基本上如果我需要检查count(*)= 0是否IF mylocalvar IS NULL THEN --do stuff 我必须:

DECLARE
   mylocalvar NUMBER := 0;

这是对的吗?另外,为什么在这种情况下NO_DATA_FOUND不适用? 我可以将mylocalvar指定为0值作为默认值吗?也许在声明中:

IF mylocalvar = 0 THEN

所以我可以做{{1}}?

由于

1 个答案:

答案 0 :(得分:3)

我不明白为什么您的查询会返回NULL。它应该只返回一行,这就是不抛出异常的原因。

由于您的表没有行,COUNT(*)0。这存储在mylocalvar


尝试以下代码,输出
0

DECLARE
  mylocalvar  PLS_INTEGER;
BEGIN
  SELECT COUNT(*)
    INTO mylocalvar
    FROM dual
   WHERE 1 = 2;
  dbms_output.put_line(mylocalvar);
END;