Yar*_*oze 1 oracle collections plsql
我需要实现的目标是将游标中的所有记录都集成到一个集合中,以使用该游标中的数据填充表.不幸的是,我无法理解如何将数据从光标提取到数组中.我已尝试过批量收集,但没有办法.extend关键字是什么意思?
最后我如何从该阵列获取数据?
我首先声明了所需字段的记录.然后,我创建了一个这种类型的表.然后我批量收集从光标到表格的所有内容.它似乎工作但现在如何从该表中获取数据?
不确定为什么你在批量收集方面遇到麻烦:它非常简单.当我们处理数以万计的记录时,它会变得稍微困难一点,但是你没有说这是否是一个因素.无论哪种方式,您都不需要使用带有批量收集的扩展.
SQL> SQL> SQL> ed
Wrote file afiedt.buf
1 declare
2 type r_tmp is record
3 ( empno number
4 , deptno number
5 , sal number );
6 type nt_emp is table of r_tmp;
7 emp_recs nt_emp;
8 begin
9 select e.empno
10 , e.deptno
11 , e.sal
12 bulk collect into emp_recs
13 from emp e;
14 dbms_output.put_line('no of recs selected = '||emp_recs.count );
15 forall i in emp_recs.first..emp_recs.last
16 insert into temp_emp
17 values emp_recs(i);
18 dbms_output.put_line('no of recs inserted = '||sql%rowcount );
19* end;
20 /
no of recs selected = 17
no of recs inserted = 17
PL/SQL procedure successfully completed.
SQL>
Run Code Online (Sandbox Code Playgroud)
如您所见,从签名与表项目匹配的嵌套表中插入记录很简单.
此外,如果记录实际匹配现有表,我们可以使用%ROWTYPE语法声明嵌套表.
1 declare
2 type nt_emp temp_emp%rowtype;
3 emp_recs nt_emp;
4 begin
Run Code Online (Sandbox Code Playgroud)
Bulk Collect和Forall比正常的RBAR实现更有效,但与纯SQL相比它们仍然缓慢.所以通常我们只会使用这种构造,我们正在对数组进行一些中间数据操作,这本身不能在SQL中完成.随着Oracle的SQL功能随着每个版本的增加而增加,发现这种需求变得越来越少.
| 归档时间: |
|
| 查看次数: |
1225 次 |
| 最近记录: |