PL/SQL 迴圈執行 DML 需在 PL/SQL 與 SQL 引擎間切換,效能低落。FORALL 可批次提交值至 SQL 引擎,大幅提升效能。10g 前 FORALL 僅支援連續索引,10g 新增 INDICES OF 與 VALUES OF 子句解決非連續集合處理難題。
FORALL index_name IN lower_bound .. upper_bound sql_statement;
指定集合中所有有效索引,即使索引間有間隙。
FORALL index_name IN INDICES OF collection_name
[BETWEEN lower_bound AND upper_bound]
sql_statement;
BETWEEN 為選用,可限制處理範圍。
依自訂順序處理集合。另建一索引集合,按欲處理順序存放索引值。
FORALL index_name IN VALUES OF index_collection
sql_statement;
VALUES OF 依該索引集合順序對每個部門執行 INSERT。(單一 SQL 亦可完成,此處僅示範語法)
10g FORALL 增強讓開發者能彈性處理稀疏集合、自訂處理順序,結合批次 DML 特性,是大量資料操作的效能利器。