如何在oracle中为每个'for循环'迭代选择200条记录?

时间:2017-10-30 13:55:11

标签: oracle plsql

我想要的是这个。

我有一张像这样的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

1 个答案:

答案 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;