我们一直在使用临时表来存储pl / sql存储过程中的中间结果.任何人都可以判断通过pl / sql进行批量收集插入与普通SQL插入之间是否存在性能差异. 插入[表名] [选择查询返回大量数据] 要么
插入[表名] [选择查询返回大量数据]
要么
[选择查询返回大量数据]的光标
打开游标
获取游标批量收集到集合中
使用FORALL执行插入
以上哪两个选项最好插入大量的临时数据?
您的问题的一些实验数据(Oracle 9.2)批量收集
DECLARE TYPE t_number_table IS TABLE OF NUMBER; v_tab t_number_table; BEGIN SELECT ROWNUM BULK COLLECT INTO v_tab FROM dual CONNECT BY LEVEL < 100000; FORALL i IN 1..v_tab.COUNT INSERT INTO test VALUES (v_tab(i)); END; / -- 2.6 sec
插入
-- test table CREATE global TEMPORARY TABLE test (id number) ON COMMIT preserve ROWS; BEGIN INSERT INTO test SELECT ROWNUM FROM dual CONNECT BY LEVEL < 100000; END; / -- 1.4 sec
直接路径插入
http://download.oracle.com/docs/cd/B10500_01/server.920/a96524/c21dlins.htm
BEGIN INSERT /*+ append */ INTO test SELECT ROWNUM FROM dual CONNECT BY LEVEL < 100000; END; / -- 1.2 sec