我正在学习Oracle PL / SQL。我想知道哪个循环最适合从Cursor中获取数据。还请告诉我,何时应该使用哪个循环以获得最佳性能。
答案 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中执行它来避免上下文切换。