在PL / SQL中使用表类型数据类型时会出现“NO DATA FOUND”错误

时间:2013-07-11 13:20:29

标签: sql oracle plsql user-defined-types

这里定义一个表类型变量,并尝试使用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;

1 个答案:

答案 0 :(得分:4)

在您的代码i中是一个索引。它单调地跨越边界。因此,如果您的最低EMPNO为1234且您的最高EMPNO为5678,则i的值将为1234,1235,1236 ... 5676,5677,5678。

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

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

select * 
bulk collect into v_emp
from emp ;

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