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

在Oracle PL/SQL中,从Cusor获取数据的最佳循环是哪个?,oracle,plsql,Oracle,Plsql,我正在学习oraclepl/SQL。我想知道哪个循环最适合从游标获取数据。还请告诉我什么时候应该使用哪个循环才能获得最佳性能。我宁愿避免使用显式游标,而是使用游标进行循环 比如说, BEGIN FOR i IN (SELECT column_list FROM table ) LOOP <do something> END LOOP; END; / 记住,一个循环会一行一行地做,也就是慢慢地做 此外,循环游标优于显式游标也是有原因的。在最近的Oracle

我正在学习oraclepl/SQL。我想知道哪个循环最适合从游标获取数据。还请告诉我什么时候应该使用哪个循环才能获得最佳性能。

我宁愿避免使用显式游标,而是使用游标进行循环

比如说,

BEGIN
  FOR i IN
  (SELECT column_list FROM table
  )
  LOOP
    <do something>
  END LOOP;
END;
/
记住,一个循环会一行一行地做,也就是慢慢地做

此外,循环游标优于显式游标也是有原因的。在最近的Oracle版本中,通过在内部执行批量收集限制100,它得到了更好的优化

但是,这不仅仅是批量收集,我们还要处理随后对增量获取的数组执行的操作。我们可以通过使用FORALL语句和bulkcollect进一步提高性能


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

您知道所有循环都是什么?我是指基本循环还是for循环?编程语言的每个部分都有一些实用性或风味,使其在某些/其他情况下可用。这取决于你想解决的问题或你的偏好。例如,简单循环优于For循环是一个荒谬的讨论。感谢提供有价值的信息。@SPGuar请将其标记为已回答,这也会帮助其他人!