ORACLE中%TYPE和%ROWTYPE的使用
1 %TYPE说明
为了使一个变量的数据类型与还有一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被參照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自己主动尾随其改变,easy保持一致,也不用改动PL/SQL程序了。当不能确切地知道被參照的那个变量的数据类型时,就仅仅能採用这样的方法定义变量的数据类型。
2 %ROWTYPE说明
假设一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,而且不easy遗漏、出错。这样会添加程序的可维护性。
为了使一个变量的数据类型与一个表中记录的各个列的数据类型相相应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自己主动尾随其改变,easy保持一致,也不用改动PL/SQL程序了。当不能确切地知道被參照的那个表的结构及其数据类型时,就仅仅能採用这样的方法定义变量的数据类型。
一行记录能够保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有同样的名称和数据类型。
3 举例说明
3.1 数据准备
--组织机构结构表
CREATE TABLE SF_ORG
(
ORG_ID INT NOT NULL, --组织机构主键ID
ORG_NAME VARCHAR2(50),--组织机构名称
PARENT_ID INT--组织机构的父级
) --一级组织机构
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(1, '一级部门1',0); --二级部门 INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(2, '二级部门2',1);
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(3, '二级部门3',1);
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(4, '二级部门4',1);
3.2 %TYPE
声明两个与SF_ORG表中的PARENT_ID和ORG_NAME列的数据类型同样的变量,然后用替换变量&ORG_ID接受输入的组织机构编码,查询并显示该组织机构的名称、上级部门ID。注意,在使用由%TYPE定义的变量时要用“.”运算符指定表名限定词。
运行结果例如以下图所看到的:
type01.txt里的SQL语句例如以下:
DECLARE
V_ORG_NAME SF_ORG.ORG_NAME%TYPE; --与ORG_NAME类型同样
V_PARENT_ID SF_ORG.PARENT_ID%TYPE;--与PARENT_ID类型同样
BEGIN
SELECT ORG_NAME,PARENT_ID INTO V_ORG_NAME,V_PARENT_ID
FROM SF_ORG SO
WHERE SO.ORG_ID=&ORG_ID;
DBMS_OUTPUT.PUT_LINE('部门名称:' || V_ORG_NAME);
DBMS_OUTPUT.PUT_LINE('上级部门编码:' || TO_CHAR(V_PARENT_ID));
END;
1.1.3.3 %ROWTYPE
声明一个与SF_ORG表中各个列的列名、数据类型都同样的行记录变量V_SF_ORG_REC,然后用替换变量&ORG_ID接受输入的组织机构编码,查询并显示该组织机构的名称、上级部门ID。注意,在使用由%ROWTYPE定义的变量时要用“.”运算符指定记录变量名限定词。
运行结果例如以下图所看到的:
rowtype01.txt里的SQL语句例如以下:
DECLARE
V_SF_ORG_REC SF_ORG%ROWTYPE; --与SF_ORG表中的各个列同样
BEGIN
SELECT * INTO V_SF_ORG_REC
FROM SF_ORG SO
WHERE SO.ORG_ID=&ORG_ID;
DBMS_OUTPUT.PUT_LINE('部门ID:' || TO_CHAR(V_SF_ORG_REC.ORG_ID));
DBMS_OUTPUT.PUT_LINE('部门名称:' || V_SF_ORG_REC.ORG_NAME);
DBMS_OUTPUT.PUT_LINE('上级部门编码:' || TO_CHAR(V_SF_ORG_REC.PARENT_ID));
END;
ORACLE中%TYPE和%ROWTYPE的使用的更多相关文章
- ORACLE中 %TYPE 和 %ROWTYPE 的使用
%TYPE 用在变量的声明里,用于取得表中的字段类型: %ROWTYPE 用于声明基于某个表的行类型: 示例: %ROWTYPE 使用 DECLARE CURSOR pdct_cur ...
- ORACLE存储过程中%TYPE和%ROWTYPE的区别
ORACLE存储过程中%TYPE和%ROWTYPE的区别 在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量 因为 t_emp emp%rowtype ;这个语句的意思是 定义一个 ...
- Oracle的%type和%rowtype
1 %TYPE说明 为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供 了%TYPE定义方式.当被参照的那个变量的数据类型改变了之后,这个新定义的变 ...
- Oracle :%TYPE 和 %ROWTYPE
1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...
- oracle 中的%type,%rowtype
oracle 中的%type,%rowtype1.使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的f ...
- oracle中自定义type、以及java中传递list到过程中的例子
在java开发过程中有时候为了处理数据的速度更快,会把要处理的数据组装成list,把list作为过程的一个参数,在过程中批量处理,下面就以一个例子做简单的阐述,以此谨记. --药品目录智能审核 --说 ...
- [独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...
- oracle存储过程中%type的含义
转: oracle存储过程中%type的含义 2018-11-07 11:43:56 lizhi_ma 阅读数 1361更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- Oracle中PL/SQL简介、基本语法以及数据类型
Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...
随机推荐
- 图解单片机8位PWM、16位PWM中“位”的含义!
今天 发现很多同学 搞不懂单片机的pwm中的位表示什么意思,如很多同学会问“8位pwm.16位pwm是什么意思啊,它们有什么区别啊,其中的‘位’表示什么意思啊”.对于这些问题,今天就给大家解释下,由于 ...
- linux命令: sort
参考 linux sort 命令详解 http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html 1 sort的工作原理 sort将文 ...
- Control.Invoke和Control.BeginInvoke
问题的引入 下面有个简单的demo,大家一看代码就知道效果如何示例.我新建一个winform的程序,然后写入了如下代码: using System; using System.Windows.Form ...
- 为什么要用BitSet
BitSet适用于一类型boolean判断,Java的BitSet在这类型判断中非常高效. 举例说明:在判断前2000万数字中素数个数的程序中,如果使用最基本的素数判断代码: package com; ...
- asp.net检查服务器上目录或文件是否存在示例
原文 asp.net检查服务器上目录或文件是否存在示例 asp.net为我们提供了文件系统对象了,对于目录与文件判断是否存在我们有System.IO.File.Exists与System.IO.Dir ...
- Swift - 使用NSUserDefaults来进行本地数据存储
NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名.密码.使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaul ...
- POJ训练计划3041_Asteroids(二分图/最小点覆盖=最大匹配)
解题报告 http://blog.csdn.net/juncoder/article/details/38135053 题目传送门 题意: 给出NxN的矩阵,有M个点是障碍 每次仅仅能删除一行或者一列 ...
- hdu 4550 贪婪 思考题 权
http://acm.hdu.edu.cn/showproblem.php?pid=4550 想了挺久,然后各种分类 最终AC,假设是现场,对自己没信心的话,预计还是要WA,,,,,,然后搜题解,发现 ...
- jquery实现鼠标焦点十字效果
系统开发时很多地方需要有焦点效果,例如:鼠标点击聚焦,地图定位,在图片上突出显示,焦点定位页面元素. 本小功能通过jquery和graphics二次开发,实现通过鼠标点击页面任何区域,聚焦当前点击位置 ...
- qt槽函数中,窗口镶嵌窗口的问题,求解
my_label=newQLabel(ui->widget); my_Label->setText("yvhvv"); 我把这插入到构造函数中,正确显示. 我把这插入到 ...