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表中的列相对应。
转载于:https://blog.51cto.com/sucre/354932
Oracle PL/SQL中使用%TYPE和%ROWTYPE的方法相关推荐
- Oracle:PL/SQL 中如何使用Array
http://tech.163.com/05/0701/10/1NIODMQS00091589.html 因为在PL/SQL 中并没有数组. 这是偶查资料找的范例和自己写的范例来解释如何在PL/SQL ...
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...
- oracle 全局临时变量,如何解析Oracle PL / SQL中的简单XML片段并将其加载到全局临时表中?...
Oracle的XML数据库实现有一些令人困惑的令人眼花缭乱的选项,并且在任何给定的场景中并不总是清楚(至少对我而言).在这种特殊情况下,你想要的是 XMLTable(),它将XQuery变成一组行. ...
- Oracle PL/SQL中异常高级特性
在OraclePL/SQL语句块中exception的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛 ...
- Oracle PL/SQL中的循环处理(sql for循环)
今年春节算是休了个长假,调整好心态,迎接新一年的挑战. 今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在 ...
- oracle获取堆栈,如何从RAISED异常中获取oracle PL / SQL中原始异常的堆栈跟踪?
我有一个问题,当我捕获异常时,原始堆栈跟踪丢失,然后提高它. >在proc_a中抛出异常 >抓住例外. >执行回滚. >提出异常. >捕获异常(父块) >打印堆栈跟 ...
- 用Oracle PL/SQL 编程实现小数转分数的方法
刚在CNOUG看到有人提问如何用PL/SQL 实现小数转分数的问题,下面这段代码是我的实现,主要思路是将输入的整数及小数都分别取出,然后将小数写成以10的n次方的分数,再求其最大公约数,得到简化的分数 ...
- Oracle PL/SQL中的触发器
sql语句的执行一般都是一条一条的,当我们想执行了某一条sql语句时,会自动执行某些事件,这个时候就可以用到触发器.触发器顾名思义就是一件事的发生会被触发产生某一个事件. 创建了某触发 ...
- Oracle PL/SQL中EXCEPTION用法
1.自定義EXCEPTION DECLARE past_due EXCEPTION; acct_num NUMBER := 2; BEGIN DECLARE ---------- sub-block ...
- oracle pl/sql 中目录的创建
模式: create or replace directory 目录名 as '目录地址'; 举例: create or replace directory MEDIA_DIR as 'd:\or ...
最新文章
- 秒杀系统架构优化思路
- SpringBoot中整合Thymeleaf
- Java 并发——多线程基础
- postgresql数据库安装以及使用pgadmin连接postgresql数据库
- 2013年的财务预算
- js基础总结性能优化
- Laravel测试驱动开发--反向单元测试
- CoreLocation框架--监测方向/地磁传感器
- mysql数据库数字类型_Mysql 数据库数值类型详解
- Tomcat安装与优化
- Spring Data JPA持久层中的一对一和一对多
- python分割文本_python分割文本
- 身份证号码归属地查询接口分享
- 人工智能实验bp神经网络,BP人工神经网络模型
- matlab不能radon变换,Radon变换的理解
- 《打造Facebook》 读书报告
- 2017又是新的一年
- uniapp使用IPA苹果支付
- 【C语言刷题】汉诺塔问题
- 语义分割代码实现流程