项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1. 使用%TYPE

在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:

DECLARE
v_FirstName VARCHAR2(20);

但是如果first_name列的定义改变了会发生什么(比如说表改变了,first_name现在的类型变为VARCHAR2(25))?那就会导致所有使用这个列的PL/SQL代码都必须进行修改。如果你有很多的PL/SQL代码,这种处理可能是十分耗时和容易出错的。

这时,你可以使用”%TYPE”属性而不是将变量类型硬性编码。

例如:

DECLARE
v_FirstName students.first_name%TYPE;

通过使用%TYPE,v_FirstName变量将同students表的first_name列的类型相同(可以理解为将两者邦定起来)。
每次匿名块或命名块运行该语句块以及编译存储对象(过程、函数、包、对象类和触发器)时,就会确定该类型。
使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。

2. 使用%ROWTYPE

2.1 PL/SQL记录
PL/SQL记录类型类似于C语言中的结构,是一种复合类型,是用户自定义的。
记录提供了一种处理独立的但又作为一个整体单元相关的变量的机制。请看:

DECLARE
v_StudentID NUMBER(5);
v_FirstName VARCHAR2(20);
v_LastName VARCHAR2(20);

这3个变量在逻辑上是相互关联的,因为他们指向students表中不同的字段。如果为这些变量声明一个记录类型,那么他们之间的关系就十分明显,可作为一个单元进行处理。

DECLARE
/*Define a record type to hold common student informationi*/
TYPE t_StudentRecord IS RECORD(
StudentID NUMBER(5),
FirstName VARCHAR2(20),
LastName VARCHAR2(20);
/*Declare a variable of this type.*/
v_StudentInfo t_StudentRecord;

2.2 记录赋值
可以用SELECT语句向记录赋值,这将会从数据库中检索数据并将该数据存储到记录中。注意的是,记录中字段应该和查询结果列表中的字段相匹配。

SELECT studentID,firstName,lastName
into v_StudentInfo
from students where studentID=32;

2.3 使用%ROWTYPE

在PL/SQL中将一个记录声明为具有相同类型的数据库行的作法是很常见的。PL/SQL提供了%ROWTYPE运算符,使得这样的操作更为方便。

例如:

DECLARE
v_RoomRecord rooms%ROWTYPE;

将定义一个记录,该记录中的字段将与rooms表中的列相对应。

oracle type rowtype详解相关推荐

  1. oracle object_type,Oracle TYPE OBJECT详解 | 学步园

    ====================================================== 最近在自学PL/SQL高级编程,了解到对象类型(OBJECT TYPE). 特意搜索了一下 ...

  2. Oracle cursor_sharing 参数 详解

    一. 官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN10025 ...

  3. Oracle建立全文索引详解

    Oracle建立全文索引详解 1.全文检索和普通检索的区别 不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作: SELECT *F ...

  4. Oracle中CONCAT详解

    Oracle中CONCAT详解 1.什么是CONCAT 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写 ...

  5. oracle语句中dual什么意思,oracle中dual详解

    oracle中dual详解 基本上oracle引入dual为的就是符合语法 1. 我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的. 2. ...

  6. oracle11 share pool,Oracle Shared pool 详解

    . Shared Pool概述 在之前的blog对的内存也做了一个概述,参考: Oracle内存架构详解 在网上搜到一篇介绍shared pool非常详细的pdf资料. 原文链接以找不到,但还是要感谢 ...

  7. oracle中minus作的应用,Oracle minus用法详解及应用实例

    Oracle minus用法详解及应用实例 Oracle minus用法 "minus"直接翻译为中文是"减"的意思,在Oracle中也是用来做减法操作的,只不 ...

  8. oracle控制文件都一样么,Oracle控制文件详解

    一.Oracle控制文件 为二进制文件,初始化大小由CREATEDATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等 ...

  9. oracle参数文件initorcl位置,oracle 参数文件详解

    参数文件 两类参数文件: pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,文件名通常为init.ora spfile:二进制的参数文件,不能直接修改,只能存放在Oracle服务器端, ...

  10. oracle做子查询注意事项,Oracle子查询详解

    Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...

最新文章

  1. json-lib把XML转化为json
  2. python工程技巧_python 19个值得学习的编程技巧
  3. python网络运维案例代码库_OLDboy-python第八期运维教程
  4. 蓝桥杯JAVA省赛2013-----B------4(黄金连分数)
  5. 优化 Perl 榨取代码的最大性能
  6. poj2431java_POJ 2431 Expedition
  7. 高等微積分(高木貞治) 1.4節 例2
  8. 乱谈互联网产品开发(二)
  9. CPU 漏洞补丁对内核性能影响:4.15 比 4.11 快 7-9%
  10. frame、bounds表示大小和位置的属性以及center、position、anchorPosition
  11. centos7安装lamp
  12. 网络工程师职场进化手册
  13. 联想笔记本免费WiFi上网详解
  14. 999句英语经典口语
  15. linux虚拟机 dnw,linux下安装及使用DNW
  16. wkhtmltopdf工具将网站转换成pdf或图片
  17. 多益网络2015校园招聘第二次笔试题
  18. MAC A1466 820-00165-A 进水不触发
  19. 在vue中使用高德地图添加窗体
  20. 打出一个e^x的图像

热门文章

  1. [20170203]克隆schema.txt
  2. VirtualBox是什么
  3. Android攻略--单位转化器UC--Units Converter(学习笔记)
  4. 某大型银行某系统性能调优过程跟踪记录
  5. Linux 与 Windows 计算文件夹大小
  6. SpringMVC 的运行流程
  7. eclipse 中 project facet 的作用
  8. python 局部变量和全局变量 global
  9. python 2个dict如何合并
  10. Python 有那么神吗?