我知道有很多批量插入脚本,因为我是pl / sql的新手我很困惑。 我有两个表TABLEA(id,name,sirname,age)TABLEB(id,age),我想将所有数据从TABLEB迁移到TABLEA。
我找到了一个链接http://psoug.org/reference/array_processing.html,其中“FORALL Insert”解释了如何执行此操作。但它假设两个表列类型相同。但在我的情况下,我将复制到TABLEA上的一些列。
由于TABLEB有300万条记录,因此性能非常重要。 还有一件事我想说TABLEB是外部表,我的意思是它是从txt文件映射到正确的列到表。
那么可以做些什么来为我的案例修改以下脚本。
CREATE TABLE servers2 AS
SELECT *
FROM servers
WHERE 1=2;
DECLARE
CURSOR s_cur IS
SELECT *
FROM servers;
TYPE fetch_array IS TABLE OF s_cur%ROWTYPE;
s_array fetch_array;
BEGIN
OPEN s_cur;
LOOP
FETCH s_cur BULK COLLECT INTO s_array LIMIT 1000;
FORALL i IN 1..s_array.COUNT
INSERT INTO servers2 VALUES s_array(i);
EXIT WHEN s_cur%NOTFOUND;
END LOOP;
CLOSE s_cur;
COMMIT;
END;
答案 0 :(得分:4)
可能最快的方法是使用带有APPEND提示的普通旧INSERT:
INSERT /*+APPEND*/ INTO table_a(id,age)
SELECT id, age
FROM table_b;
不需要FORALL / BULK COLLECT等。
答案 1 :(得分:0)
您不必为外部表更改任何内容。由于您有30M数据,因此可以将限制增加到100000。但它纯粹取决于您的数据库设计和您拥有的流量。但我更喜欢增加限制。