25.PLSQL中的数组

        在上一文<<24.PLSQL中的索引表>>中,我们介绍了oracle中的索引表的使用,之前提到过索引表类似C语言中的数组,本文介绍一种PLSQL中真正的数组---Varray。Varray具有以下特点:

        1、Varray是固定长度的数组,在创建时需要制定数组的长度和类型。

        2、Varray可以放置重复的元素。

        3、Varray是一种可以在PLSQL外进行编译的类型,它的声明周期和作用域都是全局的,可被当做用户自定义的一种数据类型使用。如下,我们创建了一个名叫projects_varray的数组后,用sql developer可以看到这个数据类型,我们可以像使用普通的类型如,number、varchar2一样使用它:


一、创建数组

        创建数组的语法如下:
create or replace type 数组名称 is varray of 数组元素类型
        如下面的例子,我们创建了一个名叫projects_varray的数组,数组中元素的类型为varchar2(20)。
 create or replace type projects_varray is varray(10) of varchar2(20); 

二、创建使用数组作为字段的数据表

        一旦创建好数组之后,我们可以像使用普通的数据类型一样的使用数组,如下,我创建了一个叫做mydept的数据表,它的第三个字段就是用的projects_varray数组,表示每个部门完成的项目列表。
create table mydept(deptnum number,dname varchar2(20),projects projects_varray);

三、向含有数组的数据表中插入数据

        通过以下的方式向含有数组的数据表插入数据:
insert into mydept values (1,'系统软件部',projects_varray('NGP','Pecstart'));
        使用select语句查看我们刚才查入的数据,发现结果如下:
        数组一旦创建成功,其使用方法其实已经和普通的数据类型没有两样了,比如我们还可以和普通类型一样修改数据表的字段:
update mydept set projects=projects_varray('GNP','Pecstar','IEMS') where deptnum=1;
        再次查询修改后的数据,得到的结果如下:


四、在PLSQL中使用数组

        以上的代码都是在plsql语句块之外执行的,我们也可以把数组的定义放到PLSQL里面,如下面的代码,在declare块定义了一个数组projects_varray2:

declare
  type projects_varray2 is varray(10) of varchar2(20); 
begin
  null;
end;
/
       我们先留意下在declare里面创建的数组和在外面创建数组的语法有什么不同?答案就是在declare里面没有create or replace 关键字,这也就限定了创建的数据类型的作用域和声明周期只能在这个语句块之内,这也就是之前我们介绍过的记录类型record、索引表类型table的只能在创建它的plsql语句内使用的原因。

        创建好数组之后,我们也可以像使用索引表一样对数组进行遍历:

declare
  type projects_varray2 is varray(4) of varchar2(20); 
  v_projects projects_varray2:=projects_varray2('NGP','Pecstar','IEMS',NULL);
begin
  v_projects(4):='IEEM';
  for x in v_projects.first .. v_projects.last loop
      dbms_output.put_line(v_projects(x));
  end loop;
end;
/
        结果如下:





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值