查询性能差异pl / sql forall插入和普通SQL插入
技术问答
209 人阅读
|
0 人回复
|
2023-09-14
|
我们一直在使用临时表pl / sql存储结果存储在存储过程中。谁能说出来?pl / sql批量收集插入和普通插入SQL插入之间是否存在性能差异。* B2 P7 [* @, _1 O L; J
插入[表名] [选择查询并返回大量数据]1 i) ~! h% r4 ?
或者
. q }$ y" r$ w) d j% g$ v[选择返回大量数据查询]游标 S) q* \7 N- l
打开游标
! z! _: W. P0 k$ O9 G获取游标批量收集,集中收集7 Y% Z: H6 }" g y, x
使用FORALL执行插入# q3 W" Y! k, \: B' z1 I
哪一个更适合插入大量临时数据?' w6 s& ?2 M: ^1 [- G
: j& ?7 x1 x4 C% W$ C8 Y( J8 S" l
解决方案: & D- ?% ^, T% A1 [! u7 m4 t% \6 U; T
一些关于你问题的实验数据(Oracle 9.2)% M4 D5 F7 G6 O; P) n) \% R
大量收集. _. z5 t! E6 }0 ?: W5 F
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 插入( y) p) `4 `2 D7 S
-- test table CREATE global TEMPORARY TABLE test (id number)ON COMMIT preserve ROWS;BEGIN INSERT INTO test SELECT ROWNUM FROM dual CONNECT BY LEVEL 直接插入路径; y9 F8 N! e( G% k0 R5 [% F# n
http://download.oracle.com/docs/cd/B10500_01/server.920/a96524/c21dlins.htm7 I) N7 \9 R6 d; }
BEGIN INSERT /* append */ INTO test SELECT ROWNUM FROM dual CONNECT BY LEVEL < 100000;END;/-- 1.2 sec |
|
|
|
|
|