DECLARE
TYPE t_oo IS TABLE OF dba_objects.owner%TYPE;
TYPE t_on IS TABLE OF dba_objects.object_name%TYPE;
l_oo t_oo;
l_on t_on;
tcount number(3) := 0;
CURSOR c1
IS
SELECT owner, object_name
FROM dba_objects
WHERE ROWNUM <=1000;
BEGIN
OPEN c1;
LOOP FETCH c1
BULK COLLECT INTO l_oo, l_on LIMIT 10000;
EXIT WHEN c1%NOTFOUND;
tcount := tcount +1 ;
END LOOP;
CLOSE c1;
dbms_output.put_line(tcount);
END;
/0PL/SQL 过程已成功完成。
按道理应该出来的结果是1啊,为什么是0啊?
TYPE t_oo IS TABLE OF dba_objects.owner%TYPE;
TYPE t_on IS TABLE OF dba_objects.object_name%TYPE;
l_oo t_oo;
l_on t_on;
tcount number(3) := 0;
CURSOR c1
IS
SELECT owner, object_name
FROM dba_objects
WHERE ROWNUM <=1000;
BEGIN
OPEN c1;
LOOP FETCH c1
BULK COLLECT INTO l_oo, l_on LIMIT 10000;
EXIT WHEN c1%NOTFOUND;
tcount := tcount +1 ;
END LOOP;
CLOSE c1;
dbms_output.put_line(tcount);
END;
/0PL/SQL 过程已成功完成。
按道理应该出来的结果是1啊,为什么是0啊?
tcount := tcount +1 ;
EXIT WHEN c1%NOTFOUND;
--哥哥你测试一下不就知道了。
DECLARE
TYPE t_oo IS TABLE OF dba_objects.owner%TYPE;
TYPE t_on IS TABLE OF dba_objects.object_name%TYPE;
l_oo t_oo;
l_on t_on;
tcount number(3) := 0;
CURSOR c1
IS
SELECT owner, object_name
FROM dba_objects
WHERE ROWNUM <=1000;
BEGIN
OPEN c1;
LOOP FETCH c1
BULK COLLECT INTO l_oo, l_on LIMIT 10000;
dbms_output.put_line('aaaaaa!');
EXIT WHEN c1%NOTFOUND;
dbms_output.put_line('bbbbbb!');
tcount := tcount +1 ;
END LOOP;
CLOSE c1;
dbms_output.put_line(tcount);
END;
/
FROM dba_objects
WHERE ROWNUM <=1000;
--查询出来有没有数据?
BULK COLLECT INTO l_oo, l_on LIMIT 1000;改为:FETCH c1
INTO l_oo, l_on LIMIT 1000;来测试一下看看
所以根据不会对%NOTFOUND进行赋值,所以从%NOTFOUND无法判断已经到达记录的末尾。