好处是表字段发生变化,记录字段自动改变。但是,由于每次执行前,遇到%TYPR或%ROWTYPE,

数据库系统都会去查看对应表字段类型,会造成一定的数据库开销,如果系统中大量使用记录类型,则对性能会有一定影响。

另外如果删除了某一字段,而自定义记录中使用了该字段,也会有可能忘记删除该字段。

对数据库负荷偏低的系统,性能问题一般可以不重点关注,但是对于高负荷数据库服务器,

各个环节都要考虑性能问题,每处节省一点出来,性能整体就有很大提高。

语法:

TYPE  记录名  IS RECORD

(

filed1 table.Filed%Type [NOT NULL] [:=eXPr1] ,

filed2 table.Filed%Type [NOT NULL] [:=eXPr1] ,

....... ,

filedn table.Filed%Type [NOT NULL] [:=exprn]

);

例子:记录可以整体赋值

/*conn scott/tiger

Create Table  empa  As  Select * From emp;

*/

Declare

Type EmpType is Record(

EMPNO number(4),

ENAME  varchar2(10),

JOB varchar2(15),

SAL number(7,2),

DEPTNO number(2)

);

EmpRec1  EmpType;

EmpRec2  EmpType;

Begin

EmpRec1.Empno:=7369;

EmpRec1.Ename:='SMITH';

EmpRec1.Job:='CLERK';

EmpRec1.Sal:=800;

EmpRec1.Deptno:=10;

EmpRec2 := EmpRec1;

DBMS_output.put_line(EmpRec2.empno);

End;

例子:记录不可以整体比较,只可以比较记录字段

Declare

Type EmpType is Record(

EMPNO number(4),

ENAME  varchar2(10),

JOB varchar2(15),

SAL number(7,2),

DEPTNO number(2)

);

EmpRec1  EmpType;

EmpRec2  EmpType;

Begin

EmpRec1.Empno:=7369;

EmpRec1.Ename:='SMITH';

EmpRec1.Job:='CLERK';

EmpRec1.Sal:=800;

EmpRec1.Deptno:=10;

if EmpRec1.sal < EmpRec2.sal then

DBMS_output.put_line('Xiao Xiao Xiao');

end if;

End;

例子:记录不可以整体判断为空,只可以判断记录字段。

Declare

Type EmpType is Record(

EMPNO number(4),

ENAME  varchar2(10),

JOB varchar2(15),

SAL number(7,2),

DEPTNO number(2)

);

EmpRec  EmpType;

Begin

if EmpRec.ename is null then

DBMS_output.put_line('Kong Kong Kong');

end if;

End;

例子:使用%TYPE和%ROWTYPE动态指定记录字段。

/*conn scott/tiger

Create Table  empa  As  Select * From emp;

*/

DECLARE

Type MyRecType Is  Record

(

RENO  EMPA.EMPNO%Type,

RENAME   EMPA.ENAME%Type,

RJOB   EMPA.JOB%Type

);

EmpRec  MyRecType;

Begin

Select   EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '7369';

If  EmpRec.RJOB  = 'CLERK'  Then

DBMS_OUTPUT.PUT_LINE('Name: '||EmpRec.RENAME);

End If;

End;

例子:数据集中的记录和记录类型中的数据关系。

DECLARE

Type MyRecType Is  Record

(

RENO  EMPA.EMPNO%Type,

RENAME   EMPA.ENAME%Type,

RJOB   EMPA.JOB%Type

);

EmpRec  MyRecType;

vJob  EMPA.JOB%Type;

Begin

Select   EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '7369';

DBMS_OUTPUT.PUT_LINE('MyRecType.RJOB: '||EmpRec.RJOB);

EmpRec.RJOB  := '修改值后'  ;

DBMS_OUTPUT.PUT_LINE('MyRecType.RJOB: '||EmpRec.RJOB);

Select JOB  InTo vJob  from empa  Where empa.EMPNO = EmpRec.RENO;

DBMS_OUTPUT.PUT_LINE('EMPA.JOB: '||vJob);

End;

/四,使用记录向表中插入数据? 根据表结构合理安排记录字段。比如主外键。

如果用记录(RECORD)插入数据,那么只能使用记录成员;

如果用%ROWTYPE插入数据,可以直接使用%ROWTYPE。

例子:使用记录成员向表中插入数据

DECLARE

Type MyRecType Is  Record

(

RENO  EMPA.EMPNO%Type,

RENAME   VARCHAR2(10),

RJOB   EMPA.JOB%Type

);

EmpRec MyRecType;

Begin

Select   EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '7369';

DBMS_OUTPUT.PUT_LINE(EmpRec.RENO||'  '||EmpRec.RENAME||'  '||EmpRec.RJOB);

EmpRec.RENO  := 1001;

EmpRec.RENAME := '杰克';

EmpRec.RJOB  := '办事员';

oracle record 遍历,ORACLE中RECORD、VARRAY、TABLE的使用详解相关推荐

  1. 深入Oracle的left join中on和where的区别详解

    今天遇到一个求某月所有天数的统计结果,如果某日的结果是0也需要显示出来,即: 日期                  交易次数   交易金额 2009-4-01           1         ...

  2. SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)

    系列文章目录 SQL全方位攻略:1.数据库介绍 SQL全方位攻略:2.SQL介绍 SQL全方位攻略:3.SQL标准 SQL全方位攻略:4. 标准SQL和SQL"方言" 文章目录 系 ...

  3. oracle数据库按日期查询,关于Oracle数据库日期范围查询的两种实现方法详解,oracle详解...

    关于Oracle数据库日期范围查询的两种实现方法详解,oracle详解 Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通过一个实例来介绍这一过程.我们假设 ...

  4. python setting.py_python基础教程:Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

  5. Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

  6. mysql敤 罚_php中mysql连接方式PDO使用详解,pdo浣跨敤璇﹁В_PHP教程

    php中mysql连接方式PDO使用详解,pdo浣跨敤璇﹁В PDO常用方法: PDO::query()主要用于有记录结果返回的操作(PDOStatement),特别是select操作. PDO::e ...

  7. mysql敤 罚_php中mysql连接方式PDO使用详解,pdo浣跨敤璇﹁В

    php中mysql连接方式PDO使用详解,pdo浣跨敤璇﹁В PDO常用方法: PDO::query()主要用于有记录结果返回的操作(PDOStatement),特别是select操作. PDO::e ...

  8. Python中的__name__和__main__含义详解

    背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main():     ...... if __name__ == "__ma ...

  9. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  10. docker导入MySQL文件_Docker容器中Mysql数据的导入/导出详解

    前言 Mysql数据的导入导出我们都知道一个mysqldump命令就能够解决,但如果是运行在docker环境下的mysql呢? 解决办法其实还是用mysqldump命令,但是我们需要进入docker的 ...

最新文章

  1. Dockerfile构建实践
  2. 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
  3. 简书mysql配置_MySQL安装配置
  4. Nginx server_name通配符匹配配置
  5. iOS 封装跑马灯和轮播效果
  6. 【Elasticsearch】父子聚合 can‘t specify parent if no parent field has been configured
  7. vSphere 5.5 App HA学习-1、App HA概述
  8. 大学计算机ppt学校题材实验报告,PPT实验报告模板2篇
  9. 微信小程序 体验版开启调试模式
  10. 如何理解js中的this
  11. EasyWechat微信支付jsapi缺少参数 total_fee
  12. HDR视频的编码参数详解
  13. OPT机器视觉12月高峰论坛一览表
  14. windows 界面
  15. linux find之exec用法
  16. python把一个英语句子倒过来_Python练习第七题,我要倒过来看
  17. 【ios】提醒事项与日历同步升级版可快速新建提醒不用设置时间
  18. ubuntu Times-Roman 字体安装
  19. RFID定位技术在智能仓库中的应用--新导智能
  20. c语言编译器xilinx,XCS10-5TQ280C_赛灵思artix-7

热门文章

  1. Core-java面试题第一套上篇
  2. M.2 固态硬盘的两种类型:SATA 和 NVMe 的区别?
  3. leetcode 449. Serialize and Deserialize BST | 449. 序列化和反序列化二叉搜索树(BST后序遍历性质)
  4. Linux export 命令用法
  5. 【算法设计与分析】Dijskra算法代码:Java版
  6. 【Java小游戏】小球躲避游戏 图片轮播爆炸效果、边缘反弹、计时功能
  7. 小师妹学JVM之:GC的垃圾回收算法
  8. Libra教程之:Transaction的生命周期
  9. CSS3属性之resize
  10. 【已解决】IDEA 配置tomcat后,javaweb项目报404