使用Oracle显式游标及for循环
发布时间:2020-12-12 15:59:25 所属栏目:百科 来源:网络整理
导读:转载地址: http://blog.csdn.net/wanghuan220323/article/details/7792669 使用隐式游标和显式游标:1.查询返回单行记录时→隐式游标;2.查询返回多行记录并逐行进行处理时→显式游标--显示游标属性declareCURSOR cur_emp IS SELECT * FROM emp;row_emp cur
转载地址: http://blog.csdn.net/wanghuan220323/article/details/7792669
使用隐式游标和显式游标: 1.查询返回单行记录时→隐式游标; 2.查询返回多行记录并逐行进行处理时→显式游标 --显示游标属性 declare CURSOR cur_emp IS SELECT * FROM emp; row_emp cur_emp%ROWTYPE; BEGIN OPEN cur_emp; FETCH cur_emp INTO row_emp; WHILE cur_emp%FOUND LOOP dbms_output.put_line(row_emp.empno||'----'||row_emp.ename); FETCH cur_emp INTO row_emp; END LOOP; close cur_emp; END; --使用显式游标修改数据(给所有的部门经理加薪1000) DECLARE CURSOR emp_cur IS SELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE; emp_row emp_cur%ROWTYPE; BEGIN OPEN emp_cur; LOOP FETCH emp_cur INTO emp_row; IF emp_cur%NOTFOUND THEN EXIT; ELSE UPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur; END IF; END LOOP; COMMIT; CLOSE emp_cur; END; ·注意:1、如果游标打开之前或关闭之后,使用游标属性,Oracle会抛出一个INVALID_CURSOR错误(ORA-01001); 2、如果在第一次fetch后结果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0; 3、如果使用了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,实际上他返回的是提取到相关集合的行数。 --游标for循环(给所有的部门经理减薪1000) DECLARE CURSOR emp_cur IS SELECT empno,sal FROM emp WHERE job='MANAGER' FOR UPDATE; BEGIN FOR emp_row IN emp_cur LOOP UPDATE emp SET sal=sal-1000 WHERE CURRENT OF emp_cur; END LOOP; COMMIT; END; --我们可以看到游标FOR循环确实很好的简化了游标的开发,我们不在需要open、fetch和close语句,不在需要用%FOUND属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。 --给经理加薪5000,其他加薪1000 DECLARE CURSOR emp_cur IS SELECT * FROM emp FOR UPDATE; BEGIN FOR emp_row IN emp_cur LOOP IF emp_row.job='MANAGER' THEN UPDATE emp SET sal=sal+5000 WHERE CURRENT OF emp_cur; ELSE UPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur; END IF; END LOOP; END; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Oracle批量更改所有表的字段取值_类型_原字段名
- vb与数据库(一)之迟到的耿建玲视频总结
- Oracle Table Demo语句应用介绍
- c# – 如何确定和检查汇编中的类型是否是使用.NET中的反射的
- ruby-on-rails – Rails 4.2.0.beta2中的奇怪行为 – 这是一
- ruby-on-rails – 如何在“1.VARIABLE.ago”时间表达式中使
- the speicified call count is not a number一种解决
- ios – 按下按钮后如何提示用户提供推送通知权限?
- c# – 如何获得picturebox的非公开成员的价值?
- ruby-on-rails – acts_as_taggable_on:如何优化查询?