Oracle 如何将数据插入PL/SQL表类型而不是PL/SQL表?
我有一个表TDATAMAP,它有大约1000万条记录,我想将所有记录提取到一个PL/SQL表类型变量中,将其与一些条件匹配,最后将所有需要的记录插入一个临时表中。请告诉我是否可以使用PL/SQL表类型变量和大容量插入/收集来完成。我还担心代码的性能。您可以,但可能不应该,一次将1000万条记录加载到内存中,只要有足够的内存来保存那么多。通常,批量收集与LIMIT子句一起使用,一次处理有限数量的行,例如1000行 从: BULK COLLECT子句允许您从结果中获取整个列 集合,或一次生成整个结果集。下面的例子, 将列从游标检索到集合中: 下面的示例使用LIMIT子句。每次迭代 在循环中,FETCH语句通过 表acct_ID。以前的值将被覆盖 “我想将所有记录提取到PL/SQL表类型变量中, 将其与一些条件匹配,最后插入所有必需的 暂存表中的记录。“ 这可能不是正确的方法。SQL是一种基于集合的编程语言。它的一些特性允许我们识别和处理我们想要的记录集 因此,与其采用提取、过滤、插入三个阶段的流程,不如庆祝布景的乐趣:Oracle 如何将数据插入PL/SQL表类型而不是PL/SQL表?,oracle,plsql,Oracle,Plsql,我有一个表TDATAMAP,它有大约1000万条记录,我想将所有记录提取到一个PL/SQL表类型变量中,将其与一些条件匹配,最后将所有需要的记录插入一个临时表中。请告诉我是否可以使用PL/SQL表类型变量和大容量插入/收集来完成。我还担心代码的性能。您可以,但可能不应该,一次将1000万条记录加载到内存中,只要有足够的内存来保存那么多。通常,批量收集与LIMIT子句一起使用,一次处理有限数量的行,例如1000行 从: BULK COLLECT子句允许您从结果中获取整个列 集合,或一次生成整个结果
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;