视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
OraclePL/SQL中如何使用%TYPE和%ROWTYPE
2020-11-09 10:05:35 责编:小采
文档


本文章简单的介绍了Oracle PL/SQL中如何使用%TYPE和%ROWTYPE,有需要了解的朋友可以参考一下下。

本文章简单的介绍了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记录类型类似于中的结构,是一种复合类型,是用户自定义的。
  记录提供了一种处理的但又作为一个整体单元相关的变量的机制。请看:

代码如下
  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表中的列相对应

下载本文
显示全文
专题