我想了解批量收集forall
语句的用法和需求。
这里提到的一个例子
在不同网页的大多数示例中;作者首先使用批量收集语句从表中获取数据。之后,他们使用该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
语句呢?对于错误记录或任何其他优势?