sql - 没有返回行时使用 COALESCE 与 EXCEPTION (Oracle)
问题描述
我目前遇到一个错误,当我运行一个定义/选择到我设置的变量的存储过程时,我收到一条“未找到数据”错误消息。
我尝试了两种不同的方法。一个合并列和空值(如下所示):
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;
另一种方法是处理没有为每个变量返回行的异常。
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;
哪种方法更有效/成本更低?有没有客观的方法来检查自己?(解释计划仅适用于我认为的查询)
提前致谢。
解决方案
NO_DATA_FOUND
不只是对应于某个值是否为空。它是一种默认异常类型,用于通知/处理记录是否存在。
您的比较无效。第一个根本与任何异常无关:它只是检查和替换值是否为 null,并且不处理任何类型的异常。但在另一种情况下,异常块存在但没有用,直到出现不存在行的情况,而不是数据值或列值为空。
就性能而言,第一个更快,因为没有添加额外的异常代码,但是您可以嵌入相同的代码,也不会有任何区别。
推荐阅读
- r - R将数据框转换为矩阵,将某些列保持为数字
- google-sheets - 如果单元格值(日期名称)等于今天,则条件格式
- java - log4j:WARN No appenders could be found for logger / 请在 Eclipse 中通过 Selenium 执行测试时正确初始化 log4j 系统
- java - Java在使用绝对路径时说“文件不存在”
- node.js - AWS Lambda timeout
- java - Android Studio 为构建设置节点目录(原因:错误=2,没有这样的文件或目录)
- r - 如何在 R 中编写一个带有 2 个参数并返回百分比的函数?
- c# - ASP.NET MVC how to always visit the Index Page/Action and how to set the default route.
- string - Convert a UTF-16 buffer into CString if only byte size is Known?
- wordpress - 在 Woocommerce 中按产品添加累进运费