使用LIMIT子句批量收集到PL / SQL中的嵌套表中

时间:2011-09-07 04:05:37

标签: sql oracle plsql

正如标题所说,如何使用LIMIT子句批量收集到嵌套表中? 在以下示例中,cur_data是一个嵌套表,在随后的BULK COLLECT中被覆盖。我看到EXTEND用于向嵌套表添加数据。有没有办法和BULIK COLLECT做类似的事情?

  OPEN cur;
  LOOP
      FETCH cur bulk collect INTO cur_data LIMIT 500;
      EXIT WHEN cur_data%COUNT=0;
  END LOOP;
  CLOSE cur;
  /*Data gets overwritten with empty cursor--> No data in cur_data here*/


  OPEN cur;
  FETCH cur bulk collect INTO cur_data;
  CLOSE cur;
  /*No Problems--> All data fetched into cur_data */

提前致谢。

1 个答案:

答案 0 :(得分:6)

我不确定我是否理解你要解决的问题。

如果要加载从游标中取出的每一行到集合中,则无需使用LIMIT子句。简单地

OPEN cur;
FETCH cur
 BULK COLLECT INTO cur_data;
<<do something with the data>>
CLOSE cur;

如果要使用LIMIT子句,则意味着您希望一次处理从游标返回的数据子集,以限制分配给集合的服务器PGA的数量。假设你正在那样做

OPEN cur;
LOOP
  FETCH cur
   BULK COLLECT INTO cur_data LIMIT 500;
  EXIT WHEN cur_data%count = 0;
  <<do something with the 500 elements in cur_data>>
END LOOP;
CLOSE cur;

在循环中一次获取500行数据没有任何意义,然后在循环外部对集合执行某些操作。