当插入DML的所有值都不可用时,批量收集和FOR循环

时间:2015-02-03 19:30:28

标签: plsql

我想将源表中的150K记录插入到目标表中。问题是我必须计算目标表的一些值。 我应该如何使用INSERT DML的批量收集和语句。

请在下面找到详细说明。

Source Table
Account_id | Status1| Status2

Table 1
Account_id | column2| column3| column4|column6|column7

Table 2
Account_id | column2| column3| column6|column9|column10

否则我必须从表1中获取与源表匹配的account_ids的值,并插入到表2中,我必须动态填充column9和第10列。

1 个答案:

答案 0 :(得分:1)

BULK COLLECT需要大量内存,实际上只有在以块为单位处理数据时才可行,即一次约1000行。否则,大多数系统的内存消耗都会过多。

  • 最好的选择通常是创建一个INSERT .. SELECT语句,一次检索,计算和插入所有数据。

  • 如果这不可能或太复杂,我认为第二个最佳选择是用PL / SQL编写的流水线函数。

  • 第三个最好也是最简单的选项是一个简单的PL / SQL循环,它逐行选择,计算所需的数据并逐行插入。性能方面,它通常是最糟糕的。但它仍然绰绰有余。

要获得更精确的答案,您需要指定手头的确切问题。你的问题相当广泛。