我想要的是这个。
我有一张像这样的10000条记录的表
Table A
user_id | name | rollno | state
我想要的是一次选择200条记录,然后在下一次迭代中选择接下来的200条,依此类推。我能想到的就是这个。
.... declare statement
SELECT count(*) into v_length from A;
i := 0;
FOR i into v_length /200 loop
FOR rec IN (SELECT b.blurb_id, b.article_source_clob, row_number() over(ORDER BY b.blurb_id) myrow
FROM mobile.mobile_blurb b)
WHERE myrow < i*200 and myrow > (i+1)*200 ) loop
............. and 200 record every time
end loops;
... end
答案 0 :(得分:1)
正如我的评论中所述,您可以使用BULK
collect和LIMIT
选项来满足您的要求。见下面的演示。这里每次循环都会运行并选择200
条记录。
DECLARE
CURSOR rec
IS
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL < 401;
TYPE v_var IS TABLE OF NUMBER
INDEX BY PLS_INTEGER;
var v_var;
BEGIN
OPEN rec;
LOOP
FETCH rec BULK COLLECT INTO var LIMIT 200;
EXIT WHEN (var.count = 0);
FOR i IN 1 .. var.COUNT
LOOP
DBMS_OUTPUT.put_line (var (i));
END LOOP;
END LOOP;
CLOSE rec;
END;