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 作为下标访问集合 )