如何在 Oracle 中为每次'for loop'迭代选择 200 条记录?



我想要的是这个.

我有一个有 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

正如我的评论中所述,您可以使用BULK收集和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;

最新更新