Plsql 批量收集到全局临时表中

Plsql 批量收集到全局临时表中,plsql,plsqldeveloper,Plsql,Plsqldeveloper,我在Oracle 11g和12c环境中工作。我需要创建一个执行以下操作的SP: 从两个表读取数据(联接) 将大容量收集到具有限制的表中 根据一些列中的内容,我可能需要创建一个重复记录,在这些列中有不同的结果。因此,一行可能最终成为两行,日期和数量不同 尽管这两行彼此是唯一的,但它现在可能会与我可能处理过或可能还没有处理过的另一组数据发生冲突。这将导致目标表中出现重复的PK记录,因此,在插入目标表之前,我需要压缩整个数据集的qty字段(group by)并求和 我开始只使用游标和批量收集将数据写入

我在Oracle 11g和12c环境中工作。我需要创建一个执行以下操作的SP:

  • 从两个表读取数据(联接)
  • 将大容量收集到具有限制的表中
  • 根据一些列中的内容,我可能需要创建一个重复记录,在这些列中有不同的结果。因此,一行可能最终成为两行,日期和数量不同
  • 尽管这两行彼此是唯一的,但它现在可能会与我可能处理过或可能还没有处理过的另一组数据发生冲突。这将导致目标表中出现重复的PK记录,因此,在插入目标表之前,我需要压缩整个数据集的qty字段(group by)并求和
  • 我开始只使用游标和批量收集将数据写入一个有限制的嵌套表中,但是,当然,我需要整个数据集来进行分组,因此我认为在完成上面的步骤3后,我需要将数据转储到一个全局临时表中。然而,我已经添加了很多步骤来处理我的数据,现在我在猜测我的想法应该如何做到这一点。我不知道我还能怎么做,因为我无法直接转储到GTT中而不丢失我正在处理的数据集的轨道…除非我向GTT添加sequencer列或其他东西…我想我可以。也许我想得太多了。我正在处理几十万张唱片…可能会达到一百万张。我也在寻找最好的表现。以下是潜在的新步骤:

  • 游标c1从两个表中读取数据(join)——因为我需要限制#fetched
  • 获取批量收集到嵌套表中,限制为1000
  • 根据少数列中的内容操作1000行数据,并将其插入到集合中。如果结果满足某个条件,则在集合中插入另一组数据,数据略有不同。集合现在可以>1000行,但不会超过2000行
  • 将集合插入GTT。我认为这将是对gtt的一次全面插入
  • 如果有更多记录要处理,重复步骤2至4,直到c1%未找到
  • FORALL使用GROUP BY将gtt表插入目标表,以消除重复的PK记录。。。我想我也需要分小块来做,对吗?我是否使用rownum循环来读取/插入..不确定GTT的最佳实践是什么
    我很感激你对最好、最快的方法的建议

    如果您能添加更多详细信息,这会有所帮助。表描述、样本数据和预期输出以及您已经尝试过的内容。这样更容易。与brenners一致,这里有太多的挥手动作,没有具体的问题陈述或示例代码,因此不可能推荐任何特定的操作过程(除了说明一般的经验法则外:如果您可以在SQL中完成所有工作,那么最好是在SQL中完成所有工作,并且尽可能避免复杂的GTT和PL/SQL)。不幸的是,由于保密性原因,我无法提供示例数据。我之所以是一般性的,是因为我在寻找一般性的答案。不寻找任何人来编写我的代码。我认为使用SQL意味着上下文切换,我想避免上下文切换,所以我不确定为什么要避免pl/SQL。为什么要避免GTT?如果不是GTT,那又如何除了把它全部放在一个物理表中之外,还有其他方法。我把GTT想象成内存中的数据,而不是磁盘上的数据,这样它会更快…这不是真的吗?再次,看看其他人在这种情况下做了什么。我觉得我为此提供了足够的信息。有人能告诉我什么时候使用GTT合适吗?