设为首页 收藏本站
查看: 411|回复: 0

[经验分享] ORACLE中%TYPE和%ROWTYPE的使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-28 11:25:12 | 显示全部楼层 |阅读模式
1 %TYPE说明
为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,就只能采用这种方法定义变量的数据类型。
2 %ROWTYPE说明
如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。
   为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改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定义的变量时要用“.”运算符指定表名限定词。
执行结果如下图所示:
SouthEast.jpg
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定义的变量时要用“.”运算符指定记录变量名限定词。
执行结果如下图所示:
SouthEast.jpg
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;  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-22766-1-1.html 上篇帖子: oracle修改表空间 下篇帖子: Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表