•复合类型是用户定义的
常用的复合类型有:属性 记录 表 数组
(1)
%TYPE – 引用变量和数据库列的数据类型
如:empcode emp.empno%type
%ROWTYPE – 提供表示表中一行的记录类型
如:emp_ex emp%ROWTYPE
说明:声明变量emp_ex,它可以用于存储从emp中提取的记录
(2)
两种方法:自定义记录类型和记录变量或者使用%ROWTYPE属性定义记录变量
自定义记录类型和记录变量的语法:
TYPE <记录类型名> IS RECORD(
<数据项1> <数据类型> 【NOT NULL【:=<表达式>】】;
<数据项2> <数据类型> 【NOT NULL【:=<表达式>】】;)
<记录变量名> <记录类型名>
小例子:(很简单,依葫芦画瓢)
declare
type emp_record_type is record
(v_ename emp.ename%type,
v_job emp.job%type,
v_sal emp.sal%type);
emp_rec emp_record_type;
begin
select ename,job,sal into emp_rec
from emp where empno=&eno;
dbms_output.put_line(emp_rec.v_ename||':'
emp_rec.v_job||';'||emp_rec.v_sal);
end;
/
(3)
语法:
TYPE <表类型名> IS TABLE OF <数据类型> INDEX BY BINARY_INTEGER
<表变量名> <表类型名>
说明:
表类型名:用户定义的
数据类型:表中元素的数据类型
例子:
declare
TYPE ename_table_type IS TABLE OF
emp.ename%TYPE
INDEX BY BINARY_INTEGER;
Ename_table ename_table_type;
begin
select ename INTO ename_table(1) from emp
where empno=7902;
dbms_output.put_line('员工名:'||ename_table(1));
end;
/
(4)
与表类型的区别就是声明了一个数组就确定了数组中的元素的数目
特点:元素的次序是固定而且连续的,并且索引变量从1开始一直到其定义的最大值为止
语法:
TYPE <数组类型名> IS VARRAY(<MAX_SIZE>) OF <数据类型>;
<表变量名> <表类型名>
说明:
数组类型名:用户定义的
数据类型:数组中元素的数据类型
MAX_SIZE:指明数组元素个数的最大值