函数没有return期望值,当最大值returns为NULL
Function does not return expected value, when max value returns NULL
我已经创建了函数来 return 数据集中的最大数量,如果数据集存在,即如果 MAX return 是一个值,它工作正常。
如果没有匹配的数据集,我需要 return 值为 0,但无论我尝试什么,检索要么等于无值,要么找不到数据。
已尝试如下 when no data found
、when others
和 null values
但如果未找到最大值,则无法将此函数设为 return 0,即,如果 MAX值 returns 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;
花了很长时间玩这个,但不能得到想要的结果和建议非常感谢
试试这个:
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;
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;
我已经创建了函数来 return 数据集中的最大数量,如果数据集存在,即如果 MAX return 是一个值,它工作正常。
如果没有匹配的数据集,我需要 return 值为 0,但无论我尝试什么,检索要么等于无值,要么找不到数据。
已尝试如下 when no data found
、when others
和 null values
但如果未找到最大值,则无法将此函数设为 return 0,即,如果 MAX值 returns 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;
花了很长时间玩这个,但不能得到想要的结果和建议非常感谢
试试这个:
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;
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;