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

dig*_*dug 0 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 */
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Jus*_*ave 6

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

如果要加载从游标中提取到集合中的每一行,则无需使用LIMIT子句.只是

OPEN cur;
FETCH cur
 BULK COLLECT INTO cur_data;
<<do something with the data>>
CLOSE cur;
Run Code Online (Sandbox Code Playgroud)

如果要使用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;
Run Code Online (Sandbox Code Playgroud)

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