回答

收藏

查询性能差异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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则