我已经创建了从数据集中返回最大数量的函数,如果该数据集存在(即,如果MAX返回VALUE),则可以正常工作。
如果没有匹配的数据集,我需要返回0值,但是无论我尝试什么,检索要么等于无值,要么得到没有找到的数据。
尝试了什么时候when no data found
,when others
以及null values
如下,但如果找不到最大值(即,如果MAX值返回),则无法使该函数返回0 NULL
。
CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm
(in_site_id AW_ACTIVE_ALARMS.site_id%TYPE
,in_zone_id AW_ACTIVE_ALARMS.zone_id%TYPE
,in_mod AW_ACTIVE_ALARMS.module%TYPE)
RETURN NUMBER
IS
v_msm NUMBER;
NULL_VALUES EXCEPTION;
BEGIN
SELECT MAX(AW_ACTIVE_ALARMS.weight)
INTO v_msm
FROM AW_ACTIVE_ALARMS
WHERE AW_ACTIVE_ALARMS.site_id = in_site_id
AND AW_ACTIVE_ALARMS.zone_id = in_zone_id
AND AW_ACTIVE_ALARMS.module LIKE in_mod||'%';
RETURN (v_msm);
EXCEPTION
WHEN NULL_VALUES
THEN
RETURN 0;
END sitezone_msm;
花了很长时间玩这个游戏,但无法获得理想的结果和建议,不胜感激
Try this NVL function is generally used for handling NULL values
CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm
(in_site_id AW_ACTIVE_ALARMS.site_id%TYPE
,in_zone_id AW_ACTIVE_ALARMS.zone_id%TYPE
,in_mod AW_ACTIVE_ALARMS.module%TYPE)
RETURN NUMBER
IS
v_msm NUMBER;
--NULL_VALUES EXCEPTION; -- not required
BEGIN
SELECT nvl(MAX(AW_ACTIVE_ALARMS.weight),0)
INTO v_msm
FROM AW_ACTIVE_ALARMS
WHERE AW_ACTIVE_ALARMS.site_id = in_site_id
AND AW_ACTIVE_ALARMS.zone_id = in_zone_id
AND AW_ACTIVE_ALARMS.module LIKE in_mod||'%';
RETURN (v_msm);
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END sitezone_msm;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句