Oracle 开发篇+集合(关联数组)的使用案例

本文是面向PL/SQL初学者的集合使用教程,通过SCOTT实例展示了如何利用集合处理多行数据,强调了集合在内存优化方面的优势,同时提醒了可能遇到的如buffer overflow和too many values的问题及其解决方案。文中简化了内容,便于快速学习掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:本文为面向PL/SQL集合初学者的指导手册
标签:PL/SQL、集合、列式存储、PL/SQL优化、Collection
注意:案例使用的是关联数组的集合类型,其他类型略
用途:本文以SCOTT为例展示了集合的使用
优点:使用集合方便返回多行数据,而且集合可以将临时数据放在内存实现优化
缺点:比较占用内存
易学:文中删去了不需要的多余部分,让初学者一目了然一学就会
温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化


★ 常见问题
※ 故障提示:ORA-20000:ORU-10027:buffer overflow,limit of 10000 bytes
※ 解决方法:set serveroutput on size 100000000

※ 故障提示:PL/SQL: ORA-00913: too many values
※ 解决方法:select … into …如果返回多行数据时需要放入集合变量,而非常规变量或游标


set serveroutput on
declare
  v_3 pls_integer;
  v_1 varchar2(50);
  --Cursor
  cursor cur_1 is
    select * from scott.emp;
  re_cur_1 cur_1%ROWTYPE;
  --Collection
  type t_1 is table of varchar2(1000) index by pls_integer;
  v_2 t_1;
begin
  --遍历源表
  for re_cur_1 in cur_1 loop
    v_1 := re_cur_1.deptno;
    --SQL将返回多行数据,需要使用集合变量
    select ename bulk collect into v_2 from scott.emp where deptno = v_1;
    --输出集合变量
    v_3 := v_2.first;
    while (v_3 is not null) loop
      dbms_output.put_line(v_2(v_3));
      v_3 := v_2.next(v_3);
    end loop;
  end loop;
end;
/

 


※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~

over

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值