文章目录

  • 记录
    • 1.1 基于表的记录
    • 1.2 基于游标的记录
    • 1.3 用户自定义的记录
    • 1.4 嵌套记录
      • 实例1:如何声明
      • 实例2:如何使用
    • 1.5 记录集合

记录

1.1 基于表的记录

  • 使用某一个表的所有列属性作为一个逻辑单元
  • 使用%rowtype属性简化记录的自定义
    实例:
SQL> l1  declare2      employee_rec emp%ROWTYPE;#调用表的%ROWTYPE属性3  begin4     select * into employee_rec5              from emp6       where empno=7879;7        dbms_output.put_line('empno: '||employee_rec.empno);8        dbms_output.put_line('ename: '||employee_rec.ename);9* end;
SQL> /
empno: 7879
ename: tomPL/SQL 过程已成功完成。

首先声明一个基于表emp的记录,该记录名称为employee_rec,紧接着用select语句填充记录,再通过dbms_output.put_line输出对应属性值。

1.2 基于游标的记录

  • 先声明游标
  • 再声明基于游标的记录
  • 通过LOOP循环填充记录并处理记录中的数据
    不同于表记录输出,使用游标可循环返回多个值

实例:

SQL> l1  declare2     cursor emp_cur is3             select * from emp4                      where rownum<5;5     emp_rec emp_cur%rowtype;6  begin7      open emp_cur;8     loop9             fetch emp_cur into emp_rec;10             exit when emp_cur%notfound;11             dbms_output.put_line('name : ' ||emp_rec.ename);12     end loop;13* end;
SQL> /
name : tom
name : SMITH
name : ALLEN
name : WARD

首先声明游标emp_cur,并将其与select语句关联,再声明一个基于游标的记录emp_rec。然后使用loop循环填充记录,并在每次循环时对记录进行操作。

1.3 用户自定义的记录

使用自定义记录,可以不再局限于具体的表盒具体的右边定义。
实例:

SQL> declare2     #定义一个记录类型,括号中是记录的属性3     type time_rec_type is record4             (curr_date date,5             curr_day varchar2(12),6             curr_time varchar2(8) not null :='00:00:00');#非空字段必须赋予初值#声明基于自定义记录类型time_rec_type类型的记录名称time_rec#即可操作的记录对象名称7     time_rec time_rec_type;8     begin9             select sysdate10                     into time_rec.curr_date11             from dual;#提取时间中的天数12             time_rec.curr_day := to_char(time_rec.curr_date,'DAY');#提取时间中的时分秒13             time_rec.curr_time := to_char(time_rec.curr_date,'hh24:mi:ss');1415             dbms_output.put_line('Date: ' ||time_rec.curr_date);16             dbms_output.put_line('Day: ' ||time_rec.curr_day);17             dbms_output.put_line('Time: ' ||time_rec.curr_time);1819     end;20  /
Date: 20-3月 -20
Day: 星期五
Time: 11:18:58PL/SQL 过程已成功完成。

1.4 嵌套记录

使用记录的嵌套时,将记录理解为一种数据类型,即可再记录中有记录。

实例1:如何声明

声明一个用户自定义记录rec_type,再声明一个用户自定义记录emp_type,在该记录属性中将name数据类型定义为rec_type,此纪录即为记录嵌套

SQL> l1  declare2     type rec_type is record3              (4                      ename varchar2(20)5              );6     type emp_type is record7              (8                     name rec_type,9                     job varchar2(9),10                     hiredate date,11                     sal number(7,2),12                     deptno number(2,0)13             );1415     emp_rec emp_type;

实例2:如何使用

SQL> l1  declare2     type rec_type is record3              (4                      ename varchar2(20)5              );6     type emp_type is record7              (8                     name rec_type,9                     job varchar2(9),10                     hiredate date,11                     sal number(7,2),12                     deptno number(2,0)13             );1415     emp_rec emp_type;1617     begin18               select ename,job,hiredate,sal,deptno19               into emp_rec.name.ename,emp_rec.job,emp_rec.hiredate,emp_rec.sal,emp_rec.deptno20             from emp21              where empno=7369;22                dbms_output.put_line('name is '||emp_rec.name.ename||' and job is '||emp_rec.job||' and sal is '||emp_rec.sal||' and deptno is '||emp_rec.deptno);23*    end;
SQL> /
name is SMITH and job is CLERK and sal is 1000 and deptno is 20PL/SQL 过程已成功完成。

这里采用多层调用为嵌套记录中的记录类型属性赋值,如emp_rec.name.enameemp_rec.job
如果赋值时使用emp_rec.name将会报错:PLS-00494: 不支持强制放入多个记录目标

1.5 记录集合

在记录集合中,每一个下标的位置对应一个记录,通过下标即以及记录的属性访问记录中的数据对象。
实例:

SQL> l1  declare2     cursor emp_cur is3             select ename,deptno,sal from emp4                     where rownum <=4;5     type emp_type is table of emp_cur%rowtype --定义联合数组类型6     index by binary_integer;7     emp_tab emp_type; --定义联合数组8     var_counter integer :=0;910  begin11     for i in emp_cur loop --通过loop循环为联合数组填充记录12             var_counter := var_counter+1;13              emp_tab(var_counter).ename  := i.ename;14              emp_tab(var_counter).deptno  := i.deptno;15              emp_tab(var_counter).sal  := i.sal;16              dbms_output.put_line('tab name is : '||var_counter||emp_tab(var_counter).ename||' deptno is '||deptno||' sal is '||sal);17      end loop;18* end;
SQL> edit d:1SQL> @ d:1
tab name is : 1tom deptno is  sal is 10000
tab name is : 2SMITH deptno is 20 sal is 1000
tab name is : 3ALLEN deptno is 30 sal is 1520
tab name is : 4WARD deptno is 30 sal is 1187.5PL/SQL 过程已成功完成。

首先声明游标,该游标返回四行记录;再声明一个数组类型,其属性是游标的%type的属性;再定义一个数组变量和计数器,用于操作数组中的记录数据

PL_SQL模块学习之十六、记录相关推荐

  1. PL_SQL模块学习之十五、异常

    文章目录 异常 1.1 异常处理 1.2 预定义异常 1.3 自定义异常 1.4 异常作用范围 1.5 异常传播 1.5.1 可执行部分发生异常 1.5.2 声明部分发生异常 实例1:单层异常传播 实 ...

  2. 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用

    目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...

  3. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  4. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发

    Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...

  5. Java基础学习——第十六章 Java8新特性

    Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...

  6. 花书+吴恩达深度学习(十六)序列模型之双向循环网络 BRNN 和深度循环网络 Deep RNN

    目录 0. 前言 1. 双向循环网络 BRNN(Bidirectional RNN) 2. 深度循环网络 Deep RNN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花 ...

  7. JavaScript学习(十六)—实现购物车加减数量,计算总金额

    JavaScript学习(十六)-实现购物车加减数量,计算总金额 代码如下: <table border="2" cellspacing="0" soli ...

  8. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  9. C1认证学习二十六(基础选择器)

    C1认证学习二十六(基础选择器) 任务背景 CSS选择器是CSS规则的一部分,用来指定需要设置的样式的HTML元素,通过选择器可以实现CSS对HTML元素一对一或者一对多或者多对一的控制了啦. 任务目 ...

最新文章

  1. VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
  2. python怎么安装pandas模块-如何在Python 3中安装pandas包和使用数据结构
  3. python猜密码游戏规则_【python笔记 三 】python脚本实战---数字密码小游戏
  4. php 有indexof函数吗,详解PHP处理字符串类似indexof的方法函数
  5. Vue组件通信原理剖析(一)事件总线的基石 $on和$emit
  6. 计算t-test 的C程序
  7. 7年赚出两个阿里加两个腾讯,他是地表最强打工人!
  8. Linux删除安卓温控,RK平台关闭温度控制降频功能
  9. [expimp]imp导入笔记
  10. php检测是目录还是文件,php检测文件目录大小类
  11. Mysql简单的存储过程怎么写
  12. 计算机考试总时长,计算机等级考试时间|2013年计算机等级考试时长
  13. python判断字符类型例题_Python面试题:字符类型的考察
  14. 原生小程序用画布制作海报,等比例缩放,和uniapp差不多就是写法有点不同
  15. 小红书话题笔记是什么意思?小红书话题的形式有哪些?
  16. 移动端html尺寸,移动端页面的三种尺寸
  17. 计算机视觉--KNN算法和稠密SIFT实现图像识别(手势识别)
  18. [机缘参悟-14]:哲学、唯物主义、唯心主义与空无主义
  19. AutoCAD正版软件多少钱?企业应该采购多少license?
  20. CSS3 3D变换--扑克牌翻转

热门文章

  1. linux定时释放内存,定时释放Linux 内存 带释放记录
  2. linux分区出现hfs,在Arch Linux上挂载HFS +分区
  3. 导航栏不变,切换局部页面的方法
  4. 通达信指标没有了怎么找回
  5. Python开发技术—网络爬虫
  6. RESTFul与RESTFul案例
  7. ARM9基础实例-GPIO
  8. 用python画一个汉字_python使用reportlab画图示例(含中文汉字)
  9. 网页突然报502 bad gateway,平台宕掉
  10. A component required a bean of type ‘com.dmsd.spm.provider.service.BookServi