复合数据类型在oracle内部是不自动提供的,需要自己定义。
二、复合数据类型的种类:
1、记录型:内部很多分量,每个分量都有自己的名字及数据类型。类似于结构体
2、PLSQL表类型:内部存在两个分量,分别叫做主键和列。而且主键必须是binary_integer类型的。
类似于数组。
三、记录型的使用。
1、记录型的创建:
TYPE 记录类型名 IS RECORD (分量列表);
例:type emp_record_type IS RECORD (empno NUMBER,ename VARCHAR2(20),sal emp.job%TYPE);
说明:1、该语句写在Declare部分,而且有效范围只能是当前的块。
2、分量列表格式为:分量名 数据类型,每个分量之间用,分割。
2、记录型变量的创建:
变量名 记录类型名;
emp_record emp_record_type;
3、引用变量:
引用其中的分量:变量名.分量名 , 如:emp_record.ename
引用整个记录型变量。
例:使用记录类型,显示员工7839的姓名,职位,工资,部门编号。
DECLARE
TYPE emp_record_type IS RECORD (ename emp.ename%TYPE,job emp.job%TYPE,sal emp.sal%TYPE,
deptno emp.deptno%TYPE);
emp_record emp_record_type;
BEGIN
SELECT ename,job,sal,deptno INTO emp_record FROM emp WHERE empno= 7839;
–注意:select后面的列名列表一定要和记录数据类型的分量名列表在个数及数据类型上一致。
dbms_output.put_line(emp_record.ename||emp_record.job||emp_record.sal||emp_record.deptno);
END;
练习:使用记录类型,查询部门20中工资最低的人员姓名,工资。
DECLARE
TYPE emp_record_type IS RECORD (ename emp.ename%TYPE,sal emp.sal%TYPE);
emp_record emp_record_type;
BEGIN
SELECT ename,sal INTO emp_record FROM emp
WHERE deptno = 20 AND sal = (SELECT MIN(sal) FROM emp WHERE deptno = 20);
dbms_output.put_line(emp_record.ename||emp_record.sal);
END;
四、%rowtype属性:用来快速声明一个记录型变量。
%前面可以写表名、视图名、游标名
用法:变量名 表名|视图名%ROWTYPE;
例:使用%rowtype属性,显示员工7839的姓名,职位,工资,部门编号。
DECLARE
emp_record emp%ROWTYPE;
BEGIN
SELECT * INTO emp_record FROM emp WHERE empno= 7839;
dbms_output.put_line(emp_record.ename||emp_record.job||emp_record.sal||emp_record.deptno);
END;
练习:使用%rowtype属性,查询部门20中工资最低的人员姓名,工资。
五、PL/SQL表类型的使用
1、表类型的创建
TYPE 类型名 IS TABLE OF 列的数据类型 INDEX BY BINARY_INTEGER;
例如:type ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER;
说明:列的数据类型可以是任何一种标量型,也可以是复合类型。
2、表类型变量的创建:
变量名 类型名;
3、表类型变量的应用:
只能通过主键向列中赋值或取值。
变量名(index)
例:使用表类型,把员工7839的姓名显示出来。
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(-100) FROM emp WHERE empno = 7839;
dbms_output.put_line(ename_table(-100));
END;
4、PLSQL表中的方法:
exist(n):
COUNT:
FIRST:
Last:
DELETE:
调用方式:变量名.方法名[(参数列表)]
六、含有记录的PLSQL表
1、声明:
2、引用:变量名(INDEX).分量名
例:把员工7839的所有信息放入到PLSQL表中,并显示
DECLARE
TYPE emp_table_type IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER;
emp_table emp_table_type;
BEGIN
SELECT * INTO emp_table(1) FROM emp WHERE empn = 7839;
dbms_output.put_line(emp_table(1).ename||emp_table(1).sal);
END;
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4371.html