declare
cursor tab_cur is
select * from tab; type row_type is table of integer;
row_tab row_type;
loop
fetch tab_cur
bulk collect into row_tab limit 2; exit when row_tab.count=0;
for i in row_tab.first..row_tab.last
loop
null;
end loop; end loop;
想问下,外部循环条件,为什么可以用row_tab.count=0作为判别条件?因为分批次取数据,row_tab肯定存有之前取的数据,用row_tab.count=0作为判别条件感觉会进入死循环,但是结果反而是可以作为判别.
bulk collect into row_tab limit 2;每fetch一次,tab_cur记录少两条。
bulk collect into row_tab limit 2;
每次读取数据时会清空row_tab,所以游标tab_cur读到最后没有数据时tab_cur中自然也没有数据了
row_tab是集合类型,为什么会读取数据后,清空呢?
会重新从游标里讲数据插入到 raw_tab 中,当游标 %notfound ,raw_tab 里也不会有数据,所以 count = 0
每次读取操作之前,row_tab读取了数据.那批数据会清空的吗
DECLARE
CURSOR TAB_CUR IS
SELECT TNAME FROM TAB; TYPE ROW_TYPE IS TABLE OF VARCHAR2(30);
ROW_TAB ROW_TYPE;
BEGIN
OPEN TAB_CUR; LOOP FETCH TAB_CUR BULK COLLECT
INTO ROW_TAB LIMIT 1;
DBMS_OUTPUT.PUT_LINE('2:'||ROW_TAB.COUNT);
EXIT WHEN ROW_TAB.COUNT = 0;
FOR I IN ROW_TAB.FIRST .. ROW_TAB.LAST LOOP
DBMS_OUTPUT.PUT_LINE(ROW_TAB(I));
END LOOP; DBMS_OUTPUT.PUT_LINE('1:'||ROW_TAB.COUNT);
END LOOP;
END;