Oracle 如何将数据插入PL/SQL表类型而不是PL/SQL表?

Oracle 如何将数据插入PL/SQL表类型而不是PL/SQL表?,oracle,plsql,Oracle,Plsql,我有一个表TDATAMAP,它有大约1000万条记录,我想将所有记录提取到一个PL/SQL表类型变量中,将其与一些条件匹配,最后将所有需要的记录插入一个临时表中。请告诉我是否可以使用PL/SQL表类型变量和大容量插入/收集来完成。我还担心代码的性能。您可以,但可能不应该,一次将1000万条记录加载到内存中,只要有足够的内存来保存那么多。通常,批量收集与LIMIT子句一起使用,一次处理有限数量的行,例如1000行 从: BULK COLLECT子句允许您从结果中获取整个列 集合,或一次生成整个结果

我有一个表TDATAMAP,它有大约1000万条记录,我想将所有记录提取到一个PL/SQL表类型变量中,将其与一些条件匹配,最后将所有需要的记录插入一个临时表中。请告诉我是否可以使用PL/SQL表类型变量和大容量插入/收集来完成。我还担心代码的性能。

您可以,但可能不应该,一次将1000万条记录加载到内存中,只要有足够的内存来保存那么多。通常,批量收集与LIMIT子句一起使用,一次处理有限数量的行,例如1000行

从:

BULK COLLECT子句允许您从结果中获取整个列 集合,或一次生成整个结果集。下面的例子, 将列从游标检索到集合中:

下面的示例使用LIMIT子句。每次迭代 在循环中,FETCH语句通过 表acct_ID。以前的值将被覆盖

“我想将所有记录提取到PL/SQL表类型变量中, 将其与一些条件匹配,最后插入所有必需的 暂存表中的记录。“

这可能不是正确的方法。SQL是一种基于集合的编程语言。它的一些特性允许我们识别和处理我们想要的记录集

因此,与其采用提取、过滤、插入三个阶段的流程,不如庆祝布景的乐趣:

insert into your_staging_table 
select whatver
from your_10m_table
where something = your_matching_criteria;
在某些情况下,这还不够好。但这是开始的方法。

你说的“将其与某些标准匹配”到底是什么意思?我认为有一个更好的方法来做你想做的事,但是没有足够的信息告诉你。你能给出一些示例代码吗?
DECLARE
   TYPE NumList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
   CURSOR c1 IS SELECT acct_id FROM accounts;
   acct_ids NumList;
   rows NATURAL := 100;  -- set limit
BEGIN
   OPEN c1;
   LOOP
      /* The following statement fetches 100 rows (or less). */
      FETCH c1 BULK COLLECT INTO acct_ids LIMIT rows;
      EXIT WHEN c1%NOTFOUND;
      ...
   END LOOP;
   CLOSE c1;
END;
insert into your_staging_table 
select whatver
from your_10m_table
where something = your_matching_criteria;