use*_*687 0 oracle plsql bulkinsert
我想了解用法和批量收集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);
Run Code Online (Sandbox Code Playgroud)
但是我不知道何时选择这种方法。我想我可以编写如下代码:
INSERT INTO target_products
SELECT * FROM SOURCE_PRODUCTS;
Run Code Online (Sandbox Code Playgroud)
而且我认为,插入select语句可以提高性能。
那么,为什么我们需要选择批量收集forall语句?对于错误记录还是其他优势?
如果可以通过INSERT INTO SELECT子句实现要求,则甚至不需要使用foralland bulk collect语句。俗话说:“ 如果可以用SQL做到,那就用SQL做到 ”。
但是在某些情况下,您可能需要逐行处理数据,这可能会迫使您编写循环。这实际上是可怕的,这意味着您在该循环内的操作将作为结束的单个语句执行。但是,如果使用forall,PL / SQL引擎将以基于集合的方式运行循环,这将为您带来真正的良好性能提升。
| 归档时间: |
|
| 查看次数: |
24250 次 |
| 最近记录: |