PL/SQL中的数组/集合/枚举类型
–PL/SQL中提供了叫VARRAY的数据结构,可以有序的存储相同类型的一组变量的集合.
语法:
create or replace type 数组类型名 is varray(3) of 数组元素类型;
案例:
create or replace type names is varray(3) of varchar2(10);
以上案例的意思是创建了一个叫names的数组,长度为3,里边的每一个元素都是varchar2类型,初始值为null;
–给数组赋值
declare
name1 names:=names('tom','andy','jack');
begin
dbms_output.put_line('name1的长度为:'||name1.count||',第一个元素是:'||name1(1));
end;
解释:以上案例中的name1.count用来获取数组长度类型,name1(1)是获取第一个元素的值,数据库中VARRAY从1开始计数,若想修改声明过的VARRAY的长度可以用ALTER TYPE进行修改.
–另外一种创建方式,在declare中声明,比较常用
declare
type nums is varray(5) of integer;
num1 nums:=nums(10,20,50,8,9);
begin
dbms_output.put_line('num1的长度是:'||num1.count);
for i in 1..num1.count loop
dbms_output_put_line(num1(i));
end loop;
end;
区别:声明在declare中的VARRAY类型只对当前PL/SQL语句块有效,使用create type创建的对所有PL/SQL语句块都有效.
利用表或列快速定义数据类型
–具体方法:
–变量名 表名%rowtype:可以使用该表中一条记录为一个类型,包含其各个字段的类型
–变量名 表名.列名%type:使用该表中的某个字段的类型,使用的时候直接是变量名
案例:
查询出emp表中指定编号的员工姓名以及指定编号的员工所有信息赋值给eno和names和emps,并输出.
declare
eno emp.empno%type:=7369;
names emp.ename%type;
emps emp%rowtype;
begin
select ename into names from emp where empno= eno;
dbms_output.put_line(names);
select * into emps from emp where empno=7369;
dbms_output.put_line(emps.empno||','||emps.ename||','||emps.job ||','||emps.sal);
end;
解释:
declare
eno emp.empno%type:=1001;
names emp.ename%type;
emps emp%rowtype;
声明eno变量类型引用emp表中empno字段的类型,为number类型.
声明names变量,类型引用emp表中ename字段的类型,为varchar2类型
声明emps变量,类型引用emp表中一条记录的所有字段的类型,存储的也就是该条记录的所有字段信息.
begin
select ename into names from emp where empno= eno;
dbms_output.put_line(names);
select * into emps from emp where empno=7369;
dbms_output.put_line(emps.empno||','||emps.ename||','||emps.job ||','||emps.sal);
end;
两个框里选中的部分:
ename into names:将查询到的ename通过into赋值给names变量
- into emps:将查询出来的该条记录的所有字段通过into保存到emps变量中,在使用的时候通过
该变量名点字段名即可.