这里定义一个表类型变量,并尝试使用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;
答案 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 ;
这将选择表格中的所有行,并且它也会更有效。