从PLSQL函数返回空关联数组时发生异常
我有一个PLSQL函数,它返回一个关联数组。 这是我的密码从PLSQL函数返回空关联数组时发生异常,sql,exception-handling,plsql,associative-array,Sql,Exception Handling,Plsql,Associative Array,我有一个PLSQL函数,它返回一个关联数组。 这是我的密码 TYPE ASSOC_ARR IS TABLE OF NUMBER INDEX BY VARCHAR(20) FUNCTION GET_SAMPLE_MAP(ID IN NUMBER) RETURN ASSOC_ARR IS sample_map ASSOC_ARR; BEGIN FOR rec IN (SELECT LOC.STATE, LOC.POPULATION FROM LOCATIONS LOC) LOOP sam
TYPE ASSOC_ARR IS TABLE OF NUMBER INDEX BY VARCHAR(20)
FUNCTION GET_SAMPLE_MAP(ID IN NUMBER) RETURN ASSOC_ARR IS
sample_map ASSOC_ARR;
BEGIN
FOR rec IN (SELECT LOC.STATE, LOC.POPULATION FROM LOCATIONS LOC) LOOP
sample_map(rec.STATE) := rec.POPULATION;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN sample_map;
WHEN OTHERS THEN
RETURN sample_map;
END;
当我从一个过程中调用这个函数,并且SQL查询没有返回任何数据时,就会捕获到no_data_FOUND异常,该异常返回sample_map。但是我有一个错误,说
ORA-06503:PL/SQL:返回的函数没有值
*原因:对PL/SQL函数的调用已完成,但没有返回语句
执行。
*操作:重写PL/SQL函数,确保它始终返回
正确类型的值
在这种情况下,我应该从该函数返回什么以避免此错误?A将:
NO\u DATA\u FOUND
异常
因此,您的RETURN
语句将永远无法到达,从而导致ORA-06503
你应该写:
FUNCTION GET_SAMPLE_MAP(ID IN NUMBER) RETURN ASSOC_ARR IS
sample_map ASSOC_ARR;
BEGIN
FOR rec IN (SELECT LOC.STATE, LOC.POPULATION FROM LOCATIONS LOC) LOOP
sample_map(rec.STATE) := rec.POPULATION;
END LOOP;
RETURN sample_map;
END;
还值得一提的是,您永远不应该捕获意外异常并默默地忽略它。这导致了一场灾难。你可能认为你在处理这个例外,但实际上你只是在掩盖它。处理意外错误的最佳方法是让它们传播,以便您知道它们发生了