当max值返回NULL时,函数不返回预期值

时间:2015-08-05 11:15:07

标签: plsql oracle11g null case coalesce

我已创建函数来从数据集返回最大数量,如果数据集存在,则工作正常,即,如果MAX返回VALUE。

如果没有匹配的数据集,我需要返回0的值,但无论我尝试检索是否等于没有值,或者我找到了无数据。

when no data foundwhen othersnull values如下所示尝试但是如果找不到最大值,则无法使此函数返回0,即,如果MAX值返回{{1} }。

NULL

已经花了一个年龄玩这个,但不能得到理想的结果和建议非常感谢

2 个答案:

答案 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;