oracle 11g中for循环中的PL / SQL限制

时间:2017-02-15 21:02:45

标签: oracle for-loop plsql oracle11g

我有一张表有大约3000万条记录,我想循环显示表中存在的记录,如下所示:

for i in (select * from tbl_items it
             Left join location lo 
              On lo.id=it.location_id) loop 
     // check some condition 
     // insert into log table 
end loop ; 

Oracle11g中的PL / SQL过程中的for循环是否有任何限制? 我认为它有限制,我怎么能跳过限制?

1 个答案:

答案 0 :(得分:4)

PL / SQL对循环中的迭代次数没有任何实际限制。

我无法证明这一点,但我的理由是说没有限制:

  1. Database PL / SQL语言参考的PL/SQL Program Limits部分中未列出任何限制。 Oracle通常擅长的一件事是将硬限制保持在最低限度或始终有解决方法。
  2. 在编程语言中创建这样的限制是没有意义的。
  3. 多年前我开始专注于Oracle SQL和PL / SQL的一个原因是避免使用具有迭代限制的编程语言。很少有编程问题比#34;超出最大循环限制等错误更令人沮丧。如果PL / SQL中存在这个问题,很多人会知道并对此感到愤怒。
  4. 某些点,每个循环都会死掉 - 你将耗尽资源。但对于像PL / SQL这样理智的语言,您可以更加关注cosmic rays

    也许是因为"限制"你的意思是LIMIT批量收集选项?如果是这样,Oracle cursor-FOR循环使用限制为100.这意味着它将一次获取100行。这是内存和降低开销之间的良好折衷,在实践中总是足够好。

    作为a_horse_with_no_name建议,完全避免循环是Oracle SQL中的最佳实践。基于集合的程序几乎总是比逐行更快。