Record和PL/SQL表
一,什么是记录Record和PL/SQL表?
记录Record:由单行多列的标量类型构成的临时记录对象类型。类似于多维数组。
PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型。类似于一维数组和键值对。
都是用户自定义数据类型。
二,Record + PL/SQL表 用途是什么?
Record + PL/SQL表可以进行数据的多行多列存储。这样我们就可使用Record + PL/SQL表在需要时封装一个临时的表对象,进行传递和操作。
通过Record自定义表结构,封装一条记录。PL/SQL表声明 可用列 类型 为Record类型(将可用列指向Record类型变量),每个索引对应一个Record类型变量。
三,使用Record + PL/SQL表进行数据的多行多列存储
①声明Record类型和PL/SQL表,
其中PL/SQL表的索引列为主键约束和唯一约束列或自增Integer。可用列为Record类型或%RowType类型。
②填充PL/SQL表可用列(Record类型):通过索引指向Record,使用Record访问记录成员。
语法:
PL/SQL表名(索引列值).记录成员 := 记录成员类型值;
或
PL/SQL表名(索引列值) := Record类型变量;
--注意其PL/SQL表中声明的可用列要和这里赋值的Record类型变量结构一样
③访问PL/SQL表
下面是例子:
例子:
Declare
Type RecType Is Record
(
rno empa.empno%type,
rname empa.ename%type,
rsal empa.sal%type
);
Type TabType Is Table Of RecType Index By Binary_Integer;
MyTab TabType;
vN Number;
Begin
--填充
vN := 1;
For varR In (Select * From empa Order By empno ASC)
Loop
MyTab(vN).rno := varR.empno;
MyTab(vN).rname := varR.ename;
MyTab(vN).rsal := varR.sal;
vN := vN + 1;
End Loop;
--访问
vN := MyTab.First;
For varR In vN..MyTab.count
Loop
DBMS_OUTPUT.PUT_LINE(vN ||'' ''||MyTab(vN).rno||'' ''||MyTab(vN).rname||'' ''||MyTab(vN).rsal);
vN := MyTab.Next(vN);
End Loop;
End;
例子:利用记录Record可用整体赋值的特性来填充PL/SQL表
Declare
Type RecType Is Record
(
rno empa.empno%type,
rname empa.ename%type,
rsal empa.sal%type
);
Type TabType Is Table Of RecType Index By Binary_Integer;
MyTab TabType;
vN Number;
Begin
--填充
vN := 1;
For varR In (Select empno, ename, sal From empa Order By empno ASC)
Loop
MyTab(vN) := varR; --记录整体赋值
vN := vN + 1;
End Loop;
--访问
vN := MyTab.First;
For varR In vN..MyTab.count
Loop
DBMS_OUTPUT.PUT_LINE(vN ||'' ''||MyTab(vN).rno||'' ''||MyTab(vN).rname||'' ''||MyTab(vN).rsal);
vN := MyTab.Next(vN);
End Loop;
End;
例子:使用主键约束和唯一约束列做为索引列(使用EMP表中的empno作为索引列)
和使用自定义Record类型作为可用列
Declare
Type RecType Is Record
(
rno empa.empno%Type,
rname empa.ename%Type,
rsal empa.sal%Type
);
Type TabType Is Table Of RecType Index By Binary_Integer;
MyTab TabType;
vN empa.empno%Type;
Begin
--填充
For varR In (Select empno,ename,sal From empa Order By empno)
Loop
MyTab(varR.empno) := varR;
End Loop;
--访问
vN := MyTab.First;
For varR In 1..MyTab.Count
Loop
DBMS_OUTPUT.PUT_LINE(MyTab(vN).rno||'' ''||MyTab(vN).rname||'' ''||MyTab(vN).rsal);
vN := MyTab.Next(vN);
End Loop;
End;
例子:使用主键约束和唯一约束列做为索引列(使用EMP表中的empno作为索引列)
和使用%RowType类型作为可用列
Declare
Type TabType Is Table Of empa%RowType Index By Binary_Integer;
MyTab TabType;
vN empa.empno%Type;
Begin
--填充
For varR In (Select * From empa Order By empno)
Loop
MyTab(varR.empno) := varR;
End Loop;
--访问
vN := MyTab.First;
For varR In 1..MyTab.Count
Loop
DBMS_OUTPUT.PUT_LINE(MyTab(vN).empno||'' ''||MyTab(vN).ename||'' ''||MyTab(vN).sal);
vN := MyTab.Next(vN);
End Loop;
End;
Record和PL/SQL表相关推荐
- oracle 自定义表类型赋值,Oracle自定义类型 Record + PL/SQL表
一,什么是记录Record和PL/SQL表? 记录Record:由单行多列的标量类型构成的临时记录对象类型.类似于多维数组. PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型.类似于 ...
- 使用复合数据类型——PL/SQL表
pl/sql表也称为索引表,它类似于高级语言的一维数组.p/sql记录用于处理单行多列数据,而pl/sql表用于处理多行单列数据. 注意:高级语言数组的元素个数是有限制的,而且下标不能为负:而pl/s ...
- PL/SQL表---table()函数用法
http://www.itpub.net/thread-617298-1-1.html PL/SQL表---table()函数用法: 利用table()函数,我们可以将PL/SQL返回的结果集代替ta ...
- Oracle数据库之PL/SQL程序基础设计
一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /** 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常*/ BEGIN /** 执行部分 ...
- PL/SQL异常处理(原创)
Exception概述 Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理.为了提高程序的健壮性,可以在PL/SQL块中引入异常处理部分,进行捕捉异常, ...
- 二十四、oracle pl/sql 变量
一.变量介绍 在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有: 1).标量类型(scalar) 2).复合类型(composite) --用于操作单条记录 3).参照类型(r ...
- PL/SQL复合数据类型
--一.PL/SQL复合数据类型 --(一).PL/SQL记录 --1.定义PL/SQL记录 --(1).定义PL/SQL记录 --Grammar TYPE type_name IS RECORD(f ...
- PL/SQL块结构和组成元素
本篇主要内容如下: 2.1 PL/SQL块 2.2 PL/SQL结构 2.3 标识符 2.4 PL/SQL 变量类型 2.4.1 变量类型 2.4.2 复合类型 2.4.2.1 记 ...
- PL/SQL七复合数据结构
PL/SQL有两种复合数据结构:记录和集合.记录由不同的域组成,集合由不同的元素组成. 记录: 记录是PL/SQL的一种复合数据结构,scalar数据类型和其他数据类型只是简单的在包一级进行预定义,但 ...
最新文章
- python使用matplotlib可视化、使用matplotlib可视化scipy.misc图像、自定义使用winter色彩映射、将不同亮度映射到不同的色彩
- Arduino 控制舵机
- 网内病毒问题快速排除集锦
- 朋友,别告诉我你懂分布式事务!
- Android录制和播放PCM数据
- 对hash签名失败_vue项目中微信jssdk在ios签名失败
- 梯度反传_反事实政策梯度解释
- Spring_Bean配置_生命周期_注解
- scikit-learn——快速入门
- java break(),Java BreakIterator last()用法及代码示例
- 2114. 句子中的最多单词数
- 知识分享|日本面试常考问题+巧妙回答①
- VC2015 运行库安装错误 0x80240017 解决过程
- win7网上邻居_win7系统网上邻居在哪
- sonar打包出现的问题The forked VM terminated without saying properly goodbye. VM crash or System.exit called
- 头文件里应该写些什么
- LCD液晶屏连接方式有哪些呢及各自优缺点是什么?
- 软件工程第五章——总体设计
- asp.net大学生学科竞赛报名及管理系统
- [C语言]累加器----PTA
热门文章
- QT的QWhatsThis类的使用
- 南邮微型计算机实验,南邮 微机原理 微型计算机与接口技术 微机原理实验.doc...
- android中setdate不是静态,为什么当setData()和setType()不起作用时,android intent的setDataAndType()工作正常?...
- ElasticSearch技术文档
- mybatis实战教程(mybatis in action),mybatis入门到精通
- JFinal开发环境搭建,JFinal开发案例
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- 5进程原语:execl(),execlp(),execle(),execv(),execvp(),execvp(),execve()
- inverse和Cascade详解
- Common-lang包中StringUtils用法