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 最佳实践-使用伴生对象解决小孩 ...
随机推荐
- 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高)
这段时间一直在搞视频格式的转换问题,终于最近将一个图片的YUV格式转RGB格式转换成功了.下面就来介绍一下: 由于我的工程是在vs2008中的,其中包含一些相关头文件和库,所以下面只是列出部分核心代码 ...
- deferred rendering with msaa
https://docs.nvidia.com/gameworks/content/gameworkslibrary/graphicssamples/d3d_samples/antialiasedde ...
- tensorflow c++接口的编译安装与一些问题记录
参考这篇文章安装,依次安装bazel,protocbuf,eigen3,然后下载tensorflow源码,编译c++ api,将编译结果拷贝到搜索路径 最后测试案例时遇到一些问题 (1)fatal e ...
- SQL精华应用
[精确到纳秒的时间函数] SYSDATETIME().SYSUTCDATETIME() ---- 精确程度取决于执行 SQL Server 实例的计算机硬件和 Windows 版本号 [ ...
- 【架构】Twitter高性能RPC框架Finagle介绍
Twitter的RPC框架Finagle简介 Finagle是Twitter基于Netty开发的支持容错的.协议无关的RPC框架,该框架支撑了Twitter的核心服务.来自Twitter的软件工程师J ...
- 通用测试用例大全(转自——知了.Test)
为方便平时写测试用例,整理如下: 功能 条件 测试步骤 测试数据 预期结果 备注 搜索或查询 单独遍历各查询条件,测试按各查询条件是否都能够查询出相应的值. 查询出符合条件的记录 设置 ...
- Android 如何添加一个新的时区
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- docker基本
安装(centos): Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上.Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求 ...
- Android_WebView_全屏
WebView(网络视图)能加载显示网页,能够将其视为一个浏览器. 它使用了WebKit渲染引擎加载显示网页,实现WebView有下面两种不同的方法: 第一种方法的步骤: 1.在要Activity中实 ...
- hdu 3572 Task Schedule(最大流&&建图经典&&dinic)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...