oracle引用 rowtype,Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

本文详细介绍了Oracle PL/SQL中%TYPE和%ROWTYPE的使用方法。%TYPE用于使PL/SQL变量与数据库表列保持类型同步,而%ROWTYPE则用于创建与表行结构对应的记录类型。使用这两个特性可以提高代码的灵活性和维护性,特别是在数据库结构发生变化时。此外,还展示了如何通过SELECT语句向记录赋值以及在不同数据库间操作数据的一些考虑因素。

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=

相关文档:

-- To allow advanced options to be changed.

EXEC sp_configure 'show advanced options', 1

GO

-- To update the currently configured value for advanced options.

RECONFIGURE

GO

-- To enable the feature.

EXEC sp_configure 'CLR', 0

GO

-- To update the currently configured value for this feature. ......

作者: cnd8,  出处:IT专家网论坛, 责任编辑: 陈子琪, 2010-04-21 13:00   现在需要在一台服务器(A)上的数据库(Master)里访问另外一台服务器(B)的另外两个数据库(NZ 和 AU)。AU 和 NZ 是网站的部分实时数据,目前某一步操作的REPLICATION方案是从服务器B到A,AU / NZ 的表结构同Master 数据结构基本一致。  现在需要� ......

SQL Server中未公布的扩展存储过程

作者: echsys,  出处:blog, 责任编辑: 李书琴,

2008-09-09 07:00

在SQL Server中包含了几个可以访问系统注册表的扩展存储过程。它们提供了在当前的SQL Server版本中访问系统注册表的能力,而且很多人利用SQL Server来进行攻击系统。本文介绍了如何在SQL Server中禁用他们。

......

--日期转换参数,值得收藏

select CONVERT(varchar, getdate(), 120)

2004-09-12 11:06:08

select convert(varchar(10),getdate() ,120)

----------

2009-04-09

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')

20040912110608

select CONVERT(varchar(12) , get ......

(1)oracle数据库备份的导入对数据库的版本有要求,也即源数据库(导出产生备份的数据库)的版本要和目标数据库(导入数据库)的版本一致,否则可能导致导入失败。

(2)备份中的用户名(数据库导出时所使用的用户)和导入数据库的用户名最好一样,因为用户名和表空间命名有关系,如果不一样,导入就不能一次完成。也就是 ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值