我是 PL/SQL 的初学者,从不同的表中获取大量记录,并希望使用带有 BULK COLLECT 和 FORALL 的匿名块插入到 PL/SQL 中的单个表中。任何人都可以帮助我确定以下代码是否正确。我参考了很多链接
http://uksanjay.blogspot.com/2012/08/difference-between-bulk-collect-and.html?m=1
有两个表 'ABC' 和 'BCD' 从中获取记录并插入到目标表 'DEF'
ABC 表(A、B、C 是列名)
A B C
1 X Z1
2 Y Z2
BCD 表
A B C
1 X Z1
2 Y Z2
在目标表“DEF”中,我必须插入两个表记录。
代码如下:
DECLARE
TYPE FETCH_ARRAY IS TABLE OF A_CUR%ROWTYPE;
A_ARRAY FETCH_ARRAY;
CURSOR A_CUR IS
SELECT * FROM ABC
UNION ALL
SELECT * FROM BCD;
BEGIN
OPEN A_CUR;
LOOP
FETCH A_CUR BULK COLLECT INTO A_ARRAY LIMIT 1000;
FORALL i IN 1..A_ARRAY.COUNT
INSERT INTO DEF VALUES A_ARRAY(i);
EXIT WHEN A_CUR%NOTFOUND
END LOOP;
CLOSE A_CUR;
COMMIT;
END;
PS:实际代码中select语句比较复杂,源表'ABC'和'DEF'由百万条记录组成。所以请帮助我编写有效的代码。