ORACLE PL/SQL从入门到精通笔记-记录与集合之记录类型篇(五)

此书及其相关资源下载方法:关注微信公众号,点击功能介绍-书籍链接下载,即可获取

说明

本文主要介绍如下知识点:

  • 记录类型
    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;

本人是一枚程序猿,如果觉得整理的不错,请关注个人微信公众号(扫一扫):

猜你喜欢

转载自blog.csdn.net/huyingzuo/article/details/80117063
今日推荐