此书及其相关资源下载方法:关注微信公众号,点击功能介绍-书籍链接下载,即可获取
说明
本文主要介绍如下知识点:
- 记录类型
5.1.记录类型简介
5.2.定义记录类型
5.3.记录类型赋值
5.4.操纵记录类型
5.5.使用嵌套记录
5.1 记录类型简介
如果把记录变量当成一个单元来处理,可以将其声明一个类型,这就是记录类型
代码
DECLARE
v_empno hyz_emp.empno%TYPE;
v_ename hyz_emp.ename%TYPE;
BEGIN
SELECT s.empno, s.ename
INTO v_empno, v_ename
FROM hyz_emp s
WHERE s.empno = &empno;
dbms_output.put_line(v_empno || '工号对应的名字是:' || v_ename);
END;
--如果换成一个单元
DECLARE
TYPE emp_type IS RECORD(--此单元emp_type几乎可以当成一张表去使用,而且此方法能使代码更浅显易懂
v_empno NUMBER,
v_ename VARCHAR(20));
v_emp emp_type;
BEGIN
SELECT s.empno, s.ename
INTO v_emp.v_empno, v_emp.v_ename
FROM hyz_emp s
WHERE s.empno = &empno;
dbms_output.put_line(v_emp.v_empno || '工号对应的名字是:' || v_emp.v_ename);
END;
5.2 定义记录类型
语法
TYPE type_name IS RECORD
(
field_declaration
[, field_declaration]
...
) ;
语法说明
type_name 用于指定记录的名称' field_declaration 用来定义记录中的]个或多个子类
型, 其定义语法如下所示。
field_name field_type [[NOT NULL ] {:= | DEFAULT } expression]
- feld_name 用于指定记录成员的名称, 比如 empno、 ename等符合 Oracle 命名规范的
命名,- field_type 是除 REF CURSOR 以外的任何数据类型, 还可以是使用%TYPE 或
%ROWTYPE指定的数据库列类型。
5.3 记录类型赋值
简单赋值
record_name. field_name := expression;
赋值说明
- record_name 是记录名,field_name 是记录成员字段
- expression 可以是任何常量、 变量、 记录、 集合类型、 表达式、 函数调用等。
代码举例
DECLARE
TYPE emp_type IS RECORD( --此单元emp_type几乎可以当成一张表去使用,而且此方法能使代码更浅显易懂
v_empno NUMBER := 10, --初始化一个值
v_ename VARCHAR(20) := '二次猿'); --初始化一个值
v_emp emp_type;
BEGIN
v_emp.v_empno := 20;
v_emp.v_ename := '二次猿2';
dbms_output.put_line(v_emp.v_empno || '工号对应的名字是:' || v_emp.v_ename);
END;
记录类型赋值
类型必须一致
代码举例
DECLARE
TYPE emp_type IS RECORD( --此单元emp_type几乎可以当成一张表去使用,而且此方法能使代码更浅显易懂
v_empno NUMBER := 10, --初始化一个值
v_ename VARCHAR(20) := '二次猿'); --初始化一个值
v_emp emp_type;
v_emp2 emp_type;
BEGIN
v_emp.v_empno := 20;
v_emp.v_ename := '二次猿2';
dbms_output.put_line(v_emp.v_empno || '工号对应的名字是:' || v_emp.v_ename);
v_emp := v_emp2;--记录类型v_emp赋值给v_emp2
dbms_output.put_line(v_emp2.v_empno || '工号对应的名字是:' || v_emp2.v_ename);
END;
使用select或fetch语句赋值
DECLARE
TYPE emp_type IS RECORD(--此单元emp_type几乎可以当成一张表去使用,而且此方法能使代码更浅显易懂
v_empno NUMBER,
v_ename VARCHAR(20));
v_emp emp_type;
BEGIN
SELECT s.empno, s.ename
INTO v_emp
FROM hyz_emp s
WHERE s.empno = &empno;
dbms_output.put_line(v_emp.v_empno || '工号对应的名字是:' || v_emp.v_ename);
END;
5.4 操纵记录类型
在INSERT语句中使用记录类型
在UPDATE语句中使用记录类型
在RETURNING语句中使用记录类型
通过上面3点可以发现,记录变量只在下面的几种情况下才允许使用。
- 在UPDATE语句中 SET子句的右边可以使用记录变量。
- 在INSERT语句中 VALUES 子句的后面, 可以使用记录插入数据】 VALUES 后面不需要使用括号。
- 在RETURNING语句中INT0子句的后面, 可以将受影响的行插入到记录变量。
- 记录变量是不允许出现在 SELECT 列表、WHERE 子句 、GROUP BY 子句或 ORDER
BY子句中的。
5.5 使用嵌套语句
DECLARE
TYPE emp_job IS RECORD(
job VARCHAR2(9));
TYPE emp_type IS RECORD(
v_empno NUMBER,
v_ename VARCHAR(20),
v_job emp_job); --定义嵌套语句
v_job2 emp_job;
v_emp emp_type;
BEGIN
SELECT s.job INTO v_job2 FROM hyz_emp s WHERE s.empno = 5;
v_emp.v_job := v_job2;
SELECT s.empno, s.ename, s.job
INTO v_emp.v_empno, v_emp.v_ename, v_job2.job
FROM hyz_emp s
WHERE s.empno = 5;
dbms_output.put_line(v_emp.v_empno || '工号对应的名字是:' || v_emp.v_ename ||
',对应的工作:' || v_job2.job);
END;