复合类型(composite)---类似于java中的数据
---介绍
用于存放多个值的变量。主要包括这几种:
1)pl/sql记录
2)pl/sql表
3)嵌套表
4)varray
1.复合类型---pl/sql记录
类似于高级语言中的结构体,需要注意的是,当引用pl/sql记录成员时,必
须要加记录变量作为前缀(记录变量.记录成员)如下;
SQL> declare
2 --定义一个pl/sql记录类型 emp_record_type
3 type emp_record_type is record(
4 name emp.ename%type,
5 salary emp.sal%type,
6 title emp.job%type);
7 --定义一个 sun_record变量,这个变量的类型是emp_record_type
8 sun_record emp_record_type;
9 begin
10 select ename,sal,job into sun_record from emp where
empno=&no;
11 --输出
12 dbms_output.put_line('员工名:'||sun_record.name||' 工资:'||sun_record.salary||' 岗位:'||sun_record.title);
13 end;
14 /
员工名:MARTIN 工资:1250 岗位:SALESMAN
PL/SQL procedure successfully completed
如实例:sun_record是记录变量,name就是sun_record的记录成员
复合类型---pl/sql表
相当于高级语言中的数组,但是需要注意的是再高级语言中数组的下标不能为负数,而pl/sql是可以为负数,并且表元素的下标没有限制。实例如下:
SQL> --pl/sql表实例
SQL> declare
2 --定义一个pl/sql表类型 sun_table_type,该类型是用于存放emp.ename%type类型数据的数组
3 --index by binary-integer表示下标是整数
4 type sun_table_type is table of emp.ename%type index by binary_integer;
5 --定义一个sun_table变量,这个变量的类型是sun_table_type
6 sun_table sun_table_type;
7 begin
8 select ename into sun_table(0) from emp where empno=&no;
9 dbms_output.put_line('员工名:'||sun_table(0));
10 end;
11 /
员工名:MARTIN
PL/SQL procedure successfully completed
说明:
sun_table_type 是pl/sql表的类型
emp.ename%type 指定了表的元素的类型和长度
sun_table 为pl/sql表变量
sun_table(0)则表示下标为0的元素
如果把where条件去掉会怎么样?
这样就是将emp表的所有的雇员的名字都放到sun_table(0)里,程序会报错
如何解决返回多行结果的问题?
使用参照变量即可解决
下面这两种变量不怎么使用
复合变量---嵌套表(nested table)
复合变量---变长变量(varray)