oracle record 类型,Pl/SQL 复合类型 RECORD 用法详解

一、复合数据类型:内部存在分量的数据类型。

复合数据类型在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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值