Oracle %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语言中的结构,是一种复合类型,是用户自定义的。
  记录提供了一种处理独立的但又作为一个整体单元相关的变量的机制。

声明记录类型的一般语法:

TYPE  记录类型  IS  RECORD(

字段1  数据类型  [not  null]  [{default | :=}表达式]

[,  字段2 ...]

)

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

 

3.%TYPE%ROWTYPE的区别

%TYPE用于基本数据类型,%ROWTYPE用于记录类型和表结构等;他们的相同之处为:都是将其修饰的某个类型施加于某个变量,从而使两者保持一致。


 

 

来源:http://www.wangchao.net.cn/bbsdetail_148980.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值