目录
记录类型
定义一个记录类型 myrecord_type,用于存储 emp 数据表中的员工姓名和职务
%TYPE 类型
定义一个变量,存储数据表 emp 中编号为 7369 的员工姓名,并且显示出结果
%ROWTYPE 类型
声明一个用于存储 emp 数据表中每行记录的变量 var_row,并使用该变量显示员工的基本信息
记录表类型
定义一个记录表类型用于存储 emp 数据表中的数据,并显示
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
除了以上几种基本的数据类型外,PL/SQL 语言还提供了 3 种特殊的数据类型,不过这 3 种特殊类型是在基本数据类型基础上建立的
记录类型
记录类型是一种结构化的数据类型,包含若干个成员分量的复合类型
类似于 C 语言中的结构,由用户自定义形成,记录类型提供了一种可以作为整体单元考虑的变量机制,整体单元内包含有若干成员分量
TYPE record_type IS RECORD(
Field1 DATATYPE [NOT NULL][:=DEFAULT VALUE],
Field2 DATATYPE [NOT NULL][:=DEFAULT VALUE],
......
Fieldn DATATYPE [NOT NULL][:=DEFAULT VALUE]);
其中 record_type 是要定义的记录类型的名称,Field1......Fieldn 是记录类型的成员分量名称,DATATYPE 是成员变量的数据类型。
这种记录类型需要在声明部分定义
定义一个记录类型 myrecord_type,用于存储 emp 数据表中的员工姓名和职务
%TYPE 类型
在 PL/SQL 语言中经常要用到 Oracle 数据库中的某些数据表的字段内容,这时必须要保证所定义的变量类型和数据表中字段的类型一致,这时可以使用 %TYPE 关键字来声明一个与指定字段相同的数据类型,使用的时候直接紧跟在指定字段的后面
声明一个与 emp 数据表中用户名 ename 字段的数据类型一样的变量 var_name
Var_name emp.ename%TYPE
因为 emp 数据表中用户名 ename 字段的数据类型是 VARCHAR2(10),所以 %TYPE 此时声明的变量 var_name 的数据类型也为 VARCHAR2(10)
使用 %TYPE 类型来声明变量,用户不用查看数据表中各个字段的数据类型,就可以确保所定义的变量可以存储数据表中的数据,可以大大节省用户定义变量的时间,提高编程的效率,而且不会发生错误;通过这种定义变量的数据类型,可以理解为将数据变量与数据表中的字段绑定,如果数据表字段的定义经过修改,但是程序并不需要修改
定义一个变量,存储数据表 emp 中编号为 7369 的员工姓名,并且显示出结果
上面这个就是在声明部分定义了一个变量 Var_ename,其类型通过使用 %TYPE 来获取,与数据表中字段的类型一样,然后在程序中通过查询语句使用 INTO 子句将查询结果存储到 Var_ename
%ROWTYPE 类型
%TYPE 类型可以使变量获得数据表中字段的数据类型,使用 %ROWTYPE 类型可以使变量获得整个数据表记录的数据类型。
实际上可以把 %ROWTYPE 类型看成 %TYPE 类型与 RECORD 记录类型的结合,具有二者的优点,可以根据数据表中每行记录的结构定义一种特殊的记录数据类型,用来存储数据表中一行数据中各个字段的数据类型。
它的定义也是使用 %ROWTYPE 关键字来声明一个与指定数据表记录相同的数据类型,使用的时候直接紧跟在指定字段的后面
例如,声明一个用于存储 emp 数据表中每行记录的变量 var_row
Var_row emp %ROWTYPE
此时,使用 %ROWTYPE 类型所声明的变量 var_row 可以存储数据表 emp 中一行数据
声明一个用于存储 emp 数据表中每行记录的变量 var_row,并使用该变量显示员工的基本信息
记录表类型
前面介绍的记录类型变量里面每个分量只能存储一个数据,当把该记录类型变量用于存储查询语句的返回结果时,只能存储一条查询结果,如果查询语句返回多条记录的时候,就会出现错误。因此,需要另外一种数据类型—记录表类型,用于存储返回的多行数据
TYPE 记录表类型名称 IS TABLE OF 类型 INDEX BY BINARY_INTEGER
记录表类型不会存储在数据库中,关键字 INDEX BY BINARY_INTEGER 指示系统创建一个主索引,以引用表变量中的特定行
在使用的时候,要先定义记录表类型的变量
记录表类型变量名 记录表类型名称
定义一个记录表类型用于存储 emp 数据表中的数据,并显示
在上面的程序中,声明部分定义了一个记录表类型,然后定义记录表类型变量 mytable,在程序主体部分,使用查询语句将查询的结果分别赋值到 mytable 记录表中,然后显示