plsql-Oracle 集合
Posted
技术标签:
【中文标题】plsql-Oracle 集合【英文标题】:plsql- Oracle collections 【发布时间】:2018-01-28 06:12:34 【问题描述】:如何从表中获取所有列并存储到集合变量中。(作为单个变量)
大家好, 请帮我在oracle plsql中的这些问题中编写代码
【问题讨论】:
【参考方案1】:“如何从表中获取所有列并存储到集合变量中。(作为单个变量” - 如果您的表有数百万/数十亿行怎么办?您想淹没您的 PGA 内存! 您可以使用带限制的批量收集来获取有限数量的行并对其进行处理,当处理完成后,您可以将它们存储在某处并获取下一组行。
默认情况下,优化器将 Limit 100 放在 BULK COLLECT
子句之后。 PLSQL_OPTIMIZE_LEVEL 需要设置在 2 级或更高级别。
这是一个例子
DECLARE
TYPE yourtable_nt IS TABLE OF yourtable%rowtype;
tab yourtable_nt;
CURSOR cur IS SELECT * FROM yourtable;
BEGIN
OPEN cur;
LOOP
FETCH cur BULK COLLECT INTO tab LIMIT 100; -- FOR EVERY FETCH DATA IS STORED IN tab FROM INDEX 1
FOR i in 1..tab.COUNT LOOP
Null;
-- PROCESS YOUR COLLECTION DATA
END LOOP;
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
EXCEPTION
WHEN OTHERS THEN
IF cur%ISOPEN THEN
CLOSE cur;
END IF;
END;
/
您可能需要为您的餐桌找到一个适合BULK COLLECT LIMIT
的号码。
如果您的表有很多行,请为 LIMIT
尝试不同的数字,否则执行时间的差异是微不足道的。
【讨论】:
【参考方案2】:这个问题太模糊了,无法提供一个确定的答案,但这段代码是对它的一种解释的解决方案:“如何填充与表的投影匹配的 PL/SQL 集合?” p>
declare
--
-- collection of records which match EMP table
type emp_nt is table of emp%rowtype;
--
-- variable instance of that type
emp_recs emp_nt;
begin
-- use BULK COLLECT clause to populate the collection with records
select e.*
bulk collect into emp_recs
from emp e
where e.deptno = 20;
end;
【讨论】:
以上是关于plsql-Oracle 集合的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )
数学分析集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
数学分析集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
Groovymap 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )
Groovy集合声明与访问 ( 使用 [] 创建 ArrayList 和 LinkedList 集合 | 集合赋初值 | 使用下标访问集合 | 使用 IntRange 作为下标访问集合 )