ORACLE的显式游标与隐式游标
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;
执行结果看窗口中的Output
--使用显式游标修改数据(给所有的部门经理加薪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,实际上他返回的是提取到相关集合的行数。
DECLARE
CURSOR EMP_CUR IS
SELECT EMPNO, ENAME, 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循环(给所有的部门经理减薪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;
游标FOR循环确实很好的简化了游标的开发,我们不再需要 open、fetch和close语句,不再需要用 %FOUND 属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。
ORACLE的显式游标与隐式游标的更多相关文章
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
		在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ... 
- 转】C#接口-显式接口和隐式接口的实现
		[转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ... 
- C# Interface显式实现和隐式实现
		c#中对接口的实现方式有两种:隐式实现和显式实现,之前一直没仔细看过,今天查了些资料,在这里整理一下. 隐式实现的例子 interface IChinese { string Speak(); } p ... 
- 多态设计 zen of python poem  显式而非隐式  延迟赋值
		总结 1.python支持延迟赋值,但是给调用者带来了困惑: 2.显式而非隐式,应当显式地指定要初始化的变量 class Card: def __init__(self, rank, suit): s ... 
- C# 数据类型转换   显式转型、隐式转型、强制转型
		C# 的类型转换有 显式转型 和 隐式转型 两种方式. 显式转型:有可能引发异常.精确度丢失及其他问题的转换方式.需要使用手段进行转换操作. 隐式转型:不会改变原有数据精确度.引发异常,不会发生任何问 ... 
- selenium-webdriver中的显式等待与隐式等待
		在selenium-webdriver中等待的方式简单可以概括为三种: 1 导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间 2 隐式等待,直接调用i ... 
- (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
		selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ... 
- Java并发之显式锁和隐式锁的区别
		Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ... 
- Scala 中的隐式转换和隐式参数
		隐式定义是指编译器为了修正类型错误而允许插入到程序中的定义. 举例: 正常情况下"120"/12显然会报错,因为 String 类并没有实现 / 这个方法,我们无法去决定 Stri ... 
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
		第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ... 
随机推荐
- mysql将字符串字段转为数字排序或比大小
			SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ... 
- Anaconda安装Graphviz, mac下Graphviz安装, pcharm中调用pycharm, Graphviz典型例子
			mac下的Graphviz安装及使用 2017年10月13日 13:30:07 阅读数:7495 一.安装 Graphviz http://www.graphviz.org/ mac用户建议直接用ho ... 
- java反序列号漏洞分析资料汇总,待研究
			https://blog.chaitin.cn/2015-11-11_java_unserialize_rce/ http://blog.nsfocus.net/?s=fastjson http:// ... 
- c++类模板template中的typename使用方法-超级棒
			转载:https://blog.csdn.net/vanturman/article/details/80269081 如有问题请联系我删除: 目录 起因 typename的常见用法 typename ... 
- LeetCode——3Sum & 3Sum Closest
			3Sum 题目 Given an array S of n integers, are there elements a,b,c in S such that a + b + c = 0? Find ... 
- [TypeScript] Type Definitions and Modules
			For example you are building your own module, the same as Lodash: my-lodash.d.ts declare module &quo ... 
- Android adb shell学习心得(四)
			1.awk中的sub sub为替换函数.形式如 sub(/1/,"",$2) 将第二个变量的第一个1替换为空,若将sub替换为gsub.则替换全部的1. 2.awk中的-F 分隔符 ... 
- SVG路径字符串格式
			命令 名称 参数 M 移动到(moveTo) (x y)+ Z 闭合路径(closepath) (none) L 直线(lineTo) (x y)+ H 水平直线 x+ V 垂直直线 y+ C 曲线( ... 
- 通过web php 执行shell脚本,获取的结果与直接在命令行下获取的结果不同。
			公司项目中的一项小功能,统计设备的连接数.其中用到shell脚本来获取已连接设备的统计.使用命令 /bin/netstat -an| grep ESTABLISHED | awk '{print $4 ... 
- Json 简易教程
			一.什么是Json JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式 ... 
