PLSQL集合(索引表、嵌套表、可变长度数组)

1.集合

集合是存放一组数据类型相同的数据的组合,可以分为三种类型:索引表、嵌套表、可变长度数组。

调用集合的属性和方法时通常是 集合名字.属性名 集合名字.方法名

first --取集合的第一元素的下标                     
last --取集合的最后一个元素的下标
count --取集合的总长度 
limit --取集合元素索引的最大值  (索引表和嵌套表是不限个数的,所以返回null,变长数组返回定义时的最大索引 )
delete([n]) --删除集合中的元素,加n表示下标,删除对应下标的值
extend(n[,ind]): --扩展集合元素 n是一个数字,表示扩展的元素个数,ind是集合中的一个元素的下标,加上它表示扩展集合时,给扩展的元素加上值,值是ind这个下标对应的元素
next(下标) --取当前元素下一个元素的下标
prior(下标) --取当前元素上一个元素的下标 
2.索引表

使用整数或者字符串作为下标,下标不连续,元素个数无限制,只能用在PLSQL中,不能存储在数据库中

--定义索引表类型的语法:
type 类型名称 is table of 数据类型(是集合中值的数据类型)index by 下标的数据类型(varchar2,pls_integer,binary_integer);
    
declare
   type mytype is table of varchar2(200) index by binary_integer;
   tab mytype;
   ind varchar2(20);
begin
   tab(1):='张三';
   tab(-2):='李四';
   tab(0):='王五';
   ind:=tab.first;
   loop
      dbms_output.put_line(tab(ind));
      exit when ind=tab.last;
      ind:=tab.next(ind);
   end loop;
end;    
3.嵌套表

使用整数(只能为正)作为下标,下标是连续的;元素个数无限制的,可以用在PLSQL中,也可以存储在数据库中

--定义嵌套表类型:
type 类型名称 is table of 数据类型(存储的数据的数据类型);
​
declare
  type tabType is table of varchar2(200);
  tab2 tabType;
  ind pls_integer;
begin
  tab2:=tabType('a','b','c','d');
  dbms_output.put_line('tab2的长度'||tab2.count);
  for i in tab2.first..tab2.last loop
     dbms_output.put_line(tab2(i));
  end loop;
end;
​
--嵌套表在数据库中的使用:
create type tabType is table of varchar2(30);
declare
   v_tab tabType;
begin
   v_tab:=tabType('1','2','3');
   for i in v_tab.first..v_tab.last loop
     dbms_output.put_line(v_tab(i));
   end loop;
end;
4.可变长度数组

使用整数(只能为正)(pls_integer,binary_integer)作为下标,下标是连续的;元素个数有限制的,可以用在PLSQL中,也可以存储在数据库中

--变长数组类型的声明
type 类型名称 is varray|varying array(长度) of 数据类型(保存的数据的数据类型);
​
declare
   type arrType is varray(10) of varchar2(20);
   arr arrType;
begin
   arr:=arrType('a','b','c');
   dbms_output.put_line('数组的长度'||arr.count); 
   arr.extend(7);
   dbms_output.put_line('数组的长度'||arr.count);
end;
--变长数组在数据库中的使用;
create type 类型名称 is varray|varying array(长度) of 数据类型;
create table 表名(
   列名 数据类型,
   数组列 数组类型
);
insert into 表名(列名,数组列名) values(值,数组类型(值,值,值));
select * from table(select 数组列 from 表名 where 条件);
5.BULK COLLECT

使用 select ... into 变量 只能查出一条数据保存到变量中;而 select ... bulk collect into 集合类型变量 可以查出多条数据存入一个变量中。

--查询所有员工的名字
declare
   type tabType is table of emp.ename%type;
   namelist tabType;
begin
   select ename bulk collect into namelist from emp;
   for i in namelist.first..namelist.last loop
       dbms_output.put_line(namelist(i));
   end loop;
end; 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特亿安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值