我当前遇到一个错误,当我正在运行定义/选择已设置的变量的存储过程时,会收到“没有找到数据”错误消息。
我尝试了两种不同的方法。一个将列合并为null(如下所示):
BEGIN
BEGIN
SELECT COALESCE (max_value, 0) AS MAX_VALUE
INTO v_max_v
FROM table1
WHERE car_code = rcar;
--
SELECT COALESCE (min_value, 0) AS MIN_VALUE
INTO v_in_v
FROM table1
WHERE car_code = rcar;
END
END;
另一个方法是处理EACH变量未返回任何行的异常。
BEGIN
BEGIN
SELECT max_value AS MAX_VALUE
INTO v_max_v
FROM table1
WHERE car_code = rcar;
EXCEPTION
WHEN NO_DATA_FOUND
THEN v_max_v := NULL;
END
--
SELECT min_value AS MIN_VALUE
INTO v_min_v
FROM table1
WHERE car_code = rcar;
EXCEPTION
WHEN NO_DATA_FOUND
THEN v_min_v := NULL;
END
END;
哪种方法更有效/成本更低?有客观的方法检查自己吗? (解释性计划仅适用于我认为的查询)
谢谢。
答案 0 :(得分:1)
NO_DATA_FOUND
不仅仅与某个值是否为null相对应。它是一种默认的异常类型,用于通知/处理记录是否存在。
您的比较无效。第一个根本不与任何异常相关:它只是检查并替换是否为null的值,并且不处理任何类型的异常。但是在另一种情况下,异常块在那里,但是直到出现不存在任何行的情况才有用,不是数据值或列值为空。
在性能方面,第一个更快,尽管没有添加额外的异常代码,但是您可以嵌入相同的代码,也不会有任何区别。