forall
一括収集ステートメントの使用法と必要性を理解したいです。
ここで言及されている例
異なる Web ページのほとんどの例では、作成者はまず、一括収集ステートメントを使用してテーブルからデータをフェッチします。その後、forall
ステートメントを使用してターゲットテーブルに挿入しています。
DECLARE
TYPE prod_tab IS TABLE OF products%ROWTYPE;
products_tab prod_tab := prod_tab();
BEGIN
-- Populate a collection - 100000 rows
SELECT * BULK COLLECT INTO products_tab FROM source_products;
FORALL i in products_tab.first .. products_tab.last
INSERT INTO target_products VALUES products_tab(i);
しかし、いつこの方法を選択すべきかわかりません。以下のようなコードが書けると思います。
INSERT INTO target_products
SELECT * FROM SOURCE_PRODUCTS;
そして、selectステートメントに挿入すると、パフォーマンスが向上すると思います。
では、なぜ一括収集forall
ステートメントを選択する必要があるのでしょうか? エラーログやその他の利点はありますか?