一,什么是记录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表相关推荐

  1. oracle 自定义表类型赋值,Oracle自定义类型 Record + PL/SQL表

    一,什么是记录Record和PL/SQL表? 记录Record:由单行多列的标量类型构成的临时记录对象类型.类似于多维数组. PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型.类似于 ...

  2. 使用复合数据类型——PL/SQL表

    pl/sql表也称为索引表,它类似于高级语言的一维数组.p/sql记录用于处理单行多列数据,而pl/sql表用于处理多行单列数据. 注意:高级语言数组的元素个数是有限制的,而且下标不能为负:而pl/s ...

  3. PL/SQL表---table()函数用法

    http://www.itpub.net/thread-617298-1-1.html PL/SQL表---table()函数用法: 利用table()函数,我们可以将PL/SQL返回的结果集代替ta ...

  4. Oracle数据库之PL/SQL程序基础设计

    一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /** 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常*/ BEGIN /** 执行部分 ...

  5. PL/SQL异常处理(原创)

    Exception概述 Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理.为了提高程序的健壮性,可以在PL/SQL块中引入异常处理部分,进行捕捉异常, ...

  6. 二十四、oracle pl/sql 变量

    一.变量介绍 在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有: 1).标量类型(scalar) 2).复合类型(composite) --用于操作单条记录 3).参照类型(r ...

  7. PL/SQL复合数据类型

    --一.PL/SQL复合数据类型 --(一).PL/SQL记录 --1.定义PL/SQL记录 --(1).定义PL/SQL记录 --Grammar TYPE type_name IS RECORD(f ...

  8. 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 记 ...

  9. PL/SQL七复合数据结构

    PL/SQL有两种复合数据结构:记录和集合.记录由不同的域组成,集合由不同的元素组成. 记录: 记录是PL/SQL的一种复合数据结构,scalar数据类型和其他数据类型只是简单的在包一级进行预定义,但 ...

最新文章

  1. python使用matplotlib可视化、使用matplotlib可视化scipy.misc图像、自定义使用winter色彩映射、将不同亮度映射到不同的色彩
  2. Arduino 控制舵机
  3. 网内病毒问题快速排除集锦
  4. 朋友,别告诉我你懂分布式事务!
  5. Android录制和播放PCM数据
  6. 对hash签名失败_vue项目中微信jssdk在ios签名失败
  7. 梯度反传_反事实政策梯度解释
  8. Spring_Bean配置_生命周期_注解
  9. scikit-learn——快速入门
  10. java break(),Java BreakIterator last()用法及代码示例
  11. 2114. 句子中的最多单词数
  12. 知识分享|日本面试常考问题+巧妙回答①
  13. VC2015 运行库安装错误 0x80240017 解决过程
  14. win7网上邻居_win7系统网上邻居在哪
  15. sonar打包出现的问题The forked VM terminated without saying properly goodbye. VM crash or System.exit called
  16. 头文件里应该写些什么
  17. LCD液晶屏连接方式有哪些呢及各自优缺点是什么?
  18. 软件工程第五章——总体设计
  19. asp.net大学生学科竞赛报名及管理系统
  20. [C语言]累加器----PTA

热门文章

  1. QT的QWhatsThis类的使用
  2. 南邮微型计算机实验,南邮 微机原理 微型计算机与接口技术 微机原理实验.doc...
  3. android中setdate不是静态,为什么当setData()和setType()不起作用时,android intent的setDataAndType()工作正常?...
  4. ElasticSearch技术文档
  5. mybatis实战教程(mybatis in action),mybatis入门到精通
  6. JFinal开发环境搭建,JFinal开发案例
  7. 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
  8. 5进程原语:execl(),execlp(),execle(),execv(),execvp(),execvp(),execve()
  9. inverse和Cascade详解
  10. Common-lang包中StringUtils用法