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

[经验分享] oracle %type和%rowtype小实例

[复制链接]

尚未签到

发表于 2016-8-10 07:27:56 | 显示全部楼层 |阅读模式
  //%type//如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量//锚定到这个列上。这样做有什么好处呢?//比如://declare v_ename scott.emp.ename%type;//当数据类型发生变化时,此方法显得非常灵活。//如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;//假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时,//我们得手动将v_enam更改为emp.ename相同的数据长度;//当我们使用锚定类型后,变量就会自动进行调整。//%rowtype//%rowtype与%type相似;不过它将变量锚定到表的所有列,而不是锚定到某一列;//更多关于%rowtype与%type,//请参考:http://blog.csdn.net/BOBO12082119/archive/2010/12/02/6051367.aspx//下面是一个实例:create table dept(deptno varchar2(5),dname varchar2(20),loc varchar2(20));create or replace procedure pro_insert(deptno_in in dept.deptno%type,dname_in in dept.dname%type,loc_in in dept.loc%type)asv_dept dept%rowtype;beginbegininsert into deptselect deptno_in,dname_in,loc_infrom dual;commit;dbms_output.put_line('inserting successed');exceptionwhen others thenrollback;end;beginselect deptno_in,dname_in,loc_ininto v_dept from dual;dbms_output.put_line('The data having been inserted.'||'deptno:'||v_dept.deptno||',dname:'||v_dept.dname||',loc:'||v_dept.loc);end;end pro_insert;////上面的过程中,使用到了嵌套块;//所谓嵌套块就是块中包含其他子块;//嵌套块允许出现在代码块的异常处理部分和执行部分,//但是不允许出现在声明中。//SQL> set serveroutput on;SQL> exec pro_insert('111','财务部','福州');inserting successedThe data having been inserted.deptno:111,dname:财务部,loc:福州PL/SQL procedure successfully completed////从这里看出来,%rowtype定义的变量作用有点相似游标,//但是我们不能将%rowtype定义的变量当做游标来使用,//否则我们将会得到下面的错误://ORA-01422: exact fetch returns more than requested number of rowsdeclare v_dept dept%rowtype;beginselect deptno,dname,locinto v_deptfrom dept;dbms_output.put_line('The data having been inserted.'||'deptno:'||v_dept.deptno||',dname:'||v_dept.dname||',loc:'||v_dept.loc);end;////下面我们用游标来实现上面的操作,具体看下面的匿名块:declarecursor cv_dept isselect *from dept;begin//变量v_dept不必我们显示声明//for循环会为我们隐式的打开和关闭游标,不必我们现实的打开和关闭游标for v_dept in cv_dept loopdbms_output.put_line('deptno:'||v_dept.deptno||',dname:'||v_dept.dname||',loc:'||v_dept.loc);end loop;end;//deptno:111,dname:财务部,loc:福州deptno:120,dname:销售部,loc:大连deptno:130,dname:科研部,loc:北京PL/SQL procedure successfully completed
  原帖:http://topic.csdn.net/u/20110426/22/e766deb4-7426-4f82-b433-485bf5713696.html?41002

运维网声明 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.yunweiku.com/thread-255649-1-1.html 上篇帖子: oracle 数据字典表之:DBA_TABLES 下篇帖子: oracle 正则表达式的元字符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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