博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle %TYPE 和 %ROWTYPE
阅读量:7242 次
发布时间:2019-06-29

本文共 1410 字,大约阅读时间需要 4 分钟。

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表中的列相对应。

转载于:https://www.cnblogs.com/xiao-hei/p/3878357.html

你可能感兴趣的文章
upper_bound——自己的实现
查看>>
java 进销存 销售报表 库存管理 商户管理 springmvc SSM crm 项目
查看>>
web前端浏览器对象模型章节
查看>>
指针作为函数参数返回地址(值)
查看>>
落地实体 颠覆传统 区块链奏互联网时代最强音
查看>>
前端学习笔记(八)-Function、Date、RegExp
查看>>
iOS开发之地图
查看>>
使用vim内建函数findfile()笔记
查看>>
Web开发:URL编码与解码
查看>>
单调队列模板
查看>>
solr+hadoop版本不一致导致的异常
查看>>
Android Apk 瘦身大法
查看>>
Windows下忘记MySQL数据库root用户密码解决办法
查看>>
myBaits缓存
查看>>
Java笔试题(二)解释servlet、Filter和listener
查看>>
Git SSL公钥密钥生成
查看>>
怎样去思考问题 解决问题 zkc学长的福利
查看>>
第二十课:运算放大器抽象
查看>>
samtools和bcftools使用说明
查看>>
OC中使用 static 、 extern、 const使用
查看>>