我已创建函数来从数据集返回最大数量,如果数据集存在,则工作正常,即,如果MAX返回VALUE。
如果没有匹配的数据集,我需要返回0的值,但无论我尝试检索是否等于没有值,或者我找到了无数据。
在when no data found
,when others
和null values
如下所示尝试但是如果找不到最大值,则无法使此函数返回0,即,如果MAX值返回{{1} }。
NULL
已经花了一个年龄玩这个,但不能得到理想的结果和建议非常感谢
答案 0 :(得分:1)
试试这个:
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;
BEGIN
SELECT COALESCE(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);
END sitezone_msm;
答案 1 :(得分:1)
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;