哪个是从Oracle PL / SQL中的Cusor获取数据的最佳循环?

时间:2016-02-08 08:51:01

标签: oracle plsql

我正在学习Oracle PL / SQL。我想知道哪个循环最适合从Cursor中获取数据。还请告诉我,何时应该使用哪个循环以获得最佳性能。

1 个答案:

答案 0 :(得分:3)

我宁愿避免使用显式光标并使用游标进行循环

例如,

BEGIN
  FOR i IN
  (SELECT column_list FROM table
  )
  LOOP
    <do something>
  END LOOP;
END;
/

请记住,循环可以逐行 a.k.a. 慢 - 慢

此外,cursor for loop优于显式游标的原因还有一个原因。在最近的Oracle版本中,通过在内部执行bulk collect limit 100,可以更好地优化它。

但是,这不仅仅是关于批量收集,我们正在处理操作我们随后会对我们提取的阵列进行处理增量。我们可以使用 FORALL 语句以及 BULK COLLECT 来进一步提高性能。

IMO,如果可能的话,那就用纯 SQL 来做。因为,SQL和PL / SQL是两个不同的引擎。所有过程代码都由PL / SQL引擎处理,而所有SQL都由SQL语句执行器或SQL引擎处理。两个引擎之间的每个上下文切换都存在开销。因此,如果可能的话,通过在纯SQL中执行它来避免上下文切换。