Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PLSQL函数返回空关联数组时发生异常_Sql_Exception Handling_Plsql_Associative Array - Fatal编程技术网

从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

我有一个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
   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将:

  • 打开并解析SELECT语句
  • 取每行
  • 获取所有行后(或激活循环后)关闭语句
  • 因此,即使没有提取行,它也不会引发
    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;
    
    还值得一提的是,您永远不应该捕获意外异常并默默地忽略它。这导致了一场灾难。你可能认为你在处理这个例外,但实际上你只是在掩盖它。处理意外错误的最佳方法是让它们传播,以便您知道它们发生了