0

这里定义一个表类型变量并尝试使用 for 循环将行插入该变量但无法插入数据。获取数据未找到错误...请让我知道这条鳕鱼有什么问题。

    DECLARE
TYPE T_EMP
IS
  TABLE OF EMP%ROWTYPE INDEX BY BINARY_INTEGER;
  V_EMP T_EMP ;
  V_MIN_EMP EMP.EMPNO%TYPE;
  V_MAX_EMP EMP.EMPNO%TYPE;
BEGIN
  --V_MIN_EMP:=7369;
  --V_MAX_EMP:=7934;
  SELECT MIN(empno) into V_MIN_EMP FROM EMP;
  SELECT MAX(EMPNO) INTO V_MAX_EMP FROM EMP;

  FOR I IN V_MIN_EMP..V_MAX_EMP
  LOOP
    SELECT * INTO V_EMP(I) FROM EMP WHERE EMPNO=I;
  END LOOP;
END;
4

1 回答 1

4

在您的代码i中是一个索引。它单调地穿过边界。因此,如果您的最小 EMPNO 为 1234,而您的最大 EMPNO 为 5678,则它们的值i将是 1234、1235、1236 ... 5676、5677、5678。

但这可能是您想要做的,因为 EMPNO 可能是一个稀疏数组,缺少数字。因此,如果您在 EMP 中没有 EMPNO=1235 的行,您的查询将抛出 NO_DATA_FOUND。

解决方案是什么?改为使用批量收集:

select * 
bulk collect into v_emp
from emp ;

这将选择表中的所有行,并且效率也会更高。

于 2013-07-11T13:48:55.500 回答