我读到SELECT
不会检索任何数据会生成NO_DATA_FOUND
。
但根据我的经验,这不是真的,因为我做了:
SELECT COUNT(*) INTO mylocalvar FROM tbl;
在空表上,它没有启动NO_DATA_FOUND异常。
相反,我发现mylocalvar
是NULL
我将其排除在= 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}}?
由于
答案 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;