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表中的列相对应。
Oracle PL/SQL中如何使用%TYPE和%ROWTYPE相关推荐
- Oracle:PL/SQL 中如何使用Array
http://tech.163.com/05/0701/10/1NIODMQS00091589.html 因为在PL/SQL 中并没有数组. 这是偶查资料找的范例和自己写的范例来解释如何在PL/SQL ...
- 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中的触发器
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 ...
- oracle 自定义类型使用方法,oracle pl/sql中使用自定义数据类型
模式: CREATE OR REPLACE TYPE 类型名 as OBJECT (属性名 属性类型,...); 举例: CREATE OR REPLACE TYPE BITS_IDX_BASE AS ...
最新文章
- 字典 update()
- 数据字典 加载到 web 项目的 application 全局
- python etl 大猩猩_Airflow教程-使用Airflow实现ETL调度
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
- 3DMax插件和它的3DXI接口
- 前端封装接口弹出错误_项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口...
- LeetCode 672. 灯泡开关 Ⅱ(枚举)
- java servlet dao_Java+MyEclipse+Tomcat 详解Servlet和DAO数据库增删改查操作(源码)
- 中国联通董事李福申辞任
- 关于git stash的应用总结
- CentOS安装Hive
- LNMPS PHP 团队开发 需要用到的相关工具(2017年11月更新)
- 微信小程序使用腾讯地图
- 网络安全等级保护定级备案
- VALSE 4月12日 下午 第一会场 深度学习模型设计 会议记录
- 【算法千题案例】每日LeetCode打卡——68.反转字符串中的元音字母
- 【算法】3 由招聘问题看随机算法
- Soft-NMS – Improving Object Detection With One Line of Code
- opencv-人眼检测,人眼跟踪
- Sublime Text3(mac版)上好用的插件
热门文章
- 将 Firefox 浏览器的书签导出
- 大数据标签获取处理步骤_大数据处理分为哪些步骤
- kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
- Python下载与安装教程
- Java实现插值查找算法 Insert search
- Windows Server 2016离线安装.NET Framework 3.5
- 个性化资源管理器软件Q-dir_6.36(附安装包)
- php怎么去除变量里的换行,php去除字符串换行符示例分享
- VC导入导出二维数组到 .txt
- SQLite学习手册(在线备份)