并行运行Oracle For循环

时间:2014-06-26 13:39:16

标签: sql oracle for-loop parallel-processing sql-insert

我必须在AWS RDS上跟踪sql以获取oracle数据库

BEGIN
 FOR user_id_count IN 1..4000 LOOP
   INSERTUSERINTOFINALTABLE(user_id_count);
 END LOOP;
END;

其中INSERTUSERINTOFINALTABLE PROC定义如下

INSERT INTO FinalTable (USERID,  ABC,  DEF, ...,XYZ )
 select
  a.USERID,
  b.ABC,
  b.DEF,
  ....
  b.XYZ
from a
left outer join b on a.USERID = b.userid
where a.userid = USER_ID and b.XYZ not in ( select XYZ from c);

我没有为所有用户做这个简单的插入int的原因是因为我的数据非常大并且想确保我不会耗尽内存。

问题是,有没有办法在oracle中并行运行?

由于

1 个答案:

答案 0 :(得分:1)

并行插入多行没有意义。我会解释原因。

如果insert语句是循环中唯一的语句,则语句不会真正并行运行。那是因为insert语句是原子的。

同一个会话中不能有两个插入语句,同时运行,尤其是当您的插入基于另一个表的select语句时,这很可能会锁定表以进行并发读取操作。