Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

简介:

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


本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/5430206.html,如需转载请自行联系原作者

相关文章
|
4天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
4天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
4天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
SQL Oracle 关系型数据库
Oracle SQL优化之多表连接
Oracle SQL优化之多表连接
432 0
Oracle SQL优化之多表连接
|
SQL 关系型数据库 Oracle
ORACLE SQL优化之ORA-03150&ORA-02055&ORA-02063
                                                                                                             >   
4764 0
|
SQL 存储 Oracle
Oracle SQL语句优化方法总结
  1、SQL语句尽量用大写的   因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。   2、使用表的别名   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,   就可以减少解析的时间并减少那些由列歧义引起的语法错误。   3、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效)
167 0
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
好书推荐—《基于Oracle的SQL优化》
这是一本全书都在讲SQL性能优化的书。 这是国内目前SQL优化最详尽的一本书。 读了这本书,你会发现,SQL优化其实不是感觉的那么难。 这本书挺厚,800多页,对比它的价格,100多人民币,物有所值。
1210 0
|
SQL 算法 Oracle
看了此文,Oracle SQL优化文章不必再看!
  第一章 看了此文,Oracle SQL优化文章不必再看! DBAplus社群 | 2015-11-17 23:44 目录SQL优化的本质 SQL优化Road Map 2.
1368 0

热门文章

最新文章

推荐镜像

更多