PL_SQL模块学习之十六、记录
文章目录
- 记录
- 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.ename
、emp_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模块学习之十六、记录相关推荐
- PL_SQL模块学习之十五、异常
文章目录 异常 1.1 异常处理 1.2 预定义异常 1.3 自定义异常 1.4 异常作用范围 1.5 异常传播 1.5.1 可执行部分发生异常 1.5.2 声明部分发生异常 实例1:单层异常传播 实 ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发
Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...
- Java基础学习——第十六章 Java8新特性
Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...
- 花书+吴恩达深度学习(十六)序列模型之双向循环网络 BRNN 和深度循环网络 Deep RNN
目录 0. 前言 1. 双向循环网络 BRNN(Bidirectional RNN) 2. 深度循环网络 Deep RNN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花 ...
- JavaScript学习(十六)—实现购物车加减数量,计算总金额
JavaScript学习(十六)-实现购物车加减数量,计算总金额 代码如下: <table border="2" cellspacing="0" soli ...
- Java学习系列(十六)Java面向对象之基于TCP协议的网络通信
TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...
- C1认证学习二十六(基础选择器)
C1认证学习二十六(基础选择器) 任务背景 CSS选择器是CSS规则的一部分,用来指定需要设置的样式的HTML元素,通过选择器可以实现CSS对HTML元素一对一或者一对多或者多对一的控制了啦. 任务目 ...
最新文章
- VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
- python怎么安装pandas模块-如何在Python 3中安装pandas包和使用数据结构
- python猜密码游戏规则_【python笔记 三 】python脚本实战---数字密码小游戏
- php 有indexof函数吗,详解PHP处理字符串类似indexof的方法函数
- Vue组件通信原理剖析(一)事件总线的基石 $on和$emit
- 计算t-test 的C程序
- 7年赚出两个阿里加两个腾讯,他是地表最强打工人!
- Linux删除安卓温控,RK平台关闭温度控制降频功能
- [expimp]imp导入笔记
- php检测是目录还是文件,php检测文件目录大小类
- Mysql简单的存储过程怎么写
- 计算机考试总时长,计算机等级考试时间|2013年计算机等级考试时长
- python判断字符类型例题_Python面试题:字符类型的考察
- 原生小程序用画布制作海报,等比例缩放,和uniapp差不多就是写法有点不同
- 小红书话题笔记是什么意思?小红书话题的形式有哪些?
- 移动端html尺寸,移动端页面的三种尺寸
- 计算机视觉--KNN算法和稠密SIFT实现图像识别(手势识别)
- [机缘参悟-14]:哲学、唯物主义、唯心主义与空无主义
- AutoCAD正版软件多少钱?企业应该采购多少license?
- CSS3 3D变换--扑克牌翻转
热门文章
- linux定时释放内存,定时释放Linux 内存 带释放记录
- linux分区出现hfs,在Arch Linux上挂载HFS +分区
- 导航栏不变,切换局部页面的方法
- 通达信指标没有了怎么找回
- Python开发技术—网络爬虫
- RESTFul与RESTFul案例
- ARM9基础实例-GPIO
- 用python画一个汉字_python使用reportlab画图示例(含中文汉字)
- 网页突然报502 bad gateway,平台宕掉
- A component required a bean of type ‘com.dmsd.spm.provider.service.BookServi