一,概念
        Oracle的游标是一个指向上下文区域的指针,这个上下文区域是PL/SQL语句块中在执行SELECT语句或DML数据操纵语句时分配的。比如当使用SELECT语句查询返回多行数据时,可以通过游标来指向结果集中的每一行,使用循环语句依次对每一行进行处理。
        个人理解游标相当于C中的指针。因为游标其实是相当于把磁盘数据整体放入了内存中,如果游标数据量大则会造成内存不足,内存不足带来的影响大家都知道了。
        所以,在数据量小时才使用游标。
二,类型
        游标分为以下两种:
        隐式游标:由PL/SQL自动为DML语句或SELECT-INTO语句分配的游标,包括只返回一条记录的查询操作。
        显式游标:在PL/SQL块的声明区域中显式定义的,用来处理返回多行记录查询的游标。
1. 隐式Cursor:
1).对于Select …INTO…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。例如:Select /Update / Insert/Delete操作。
2)作用:可以通过隐式Cusor的属性来了解操作的状态和结果,从而达到流程的控制。Cursor的属性包含:
SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
3) 隐式Cursor是系统自动打开和关闭Cursor.
下面是一个例子:

BEGINUPDATE empSET comm = comm * 1.12WHERE empno = 7389;      --更新员工编号为7389的员工信息--使用隐式游标属性判断已更新的行数DBMS_OUTPUT.put_line (SQL%ROWCOUNT || '行被更新');--如果没有任何更新IF SQL%NOTFOUNDTHEN--显示未更新的信息DBMS_OUTPUT.put_line ('不能更新员工号为7389的员工!');END IF;--向数据库提交更改EXCEPTIONWHERE OTHERSTHENDBMS_OUTPUT.put_line (SQLERRM);  --如果出异常,提示异常信息END;

2. 显式Cursor:
(1) 对于从数据库中提取多行数据,就需要使用显式Cursor。显式Cursor的属性包含:
游标的属性 返回值类型 意 义
%ROWCOUNT 整型 获得FETCH语句返回的数据行数
%FOUND 布尔型 最近的FETCH语句返回一行数据则为真,否则为假
%NOTFOUND 布尔型 与%FOUND属性返回值相反
%ISOPEN 布尔型 游标已经打开时值为真,否则为假

(2) 对于显式游标的运用分为四个步骤:
 定义游标—Cursor [Cursor Name] IS;
 打开游标—Open [Cursor Name];
 操作数据—Fetch [Cursor name]
 关闭游标—Close [Cursor Name],这个Step绝对不可以遗漏。

DECLARE--定义加薪比例常量c_manager  CONSTANT NUMBER    :=0.15;c_salesman  CONSTANT NUMBER    :=0.12;c_clerk  CONSTANT NUMBER    :=0.10;v_job         VARCHAR(100);        ---定义职位变量v_empno   VARCHAR(20);             --定义员工编号变量v_ename   VARCHAR(60);        --定义员工名称变量CURSOR  c_empISSELECT jog,empno,enameFROM scott.empFOR UPDATE;BEGINOPEN c_emp;                            --打开游标LOOP                                      --循环游标FETCH c_empINTO v_job,v_empno,v_ename;            --提取游标数据EXIT WHEN c_emp%NOTFOUND;               --如果无数据可提取则退出游标IF v_job = 'CLERK'THEN                                    --如果为职员,加薪10%UPDATE scott.empSET sal = sal*(1 + c_clerk)WHERE CURRENT OF c_emp;ELSIF v_job = 'SALESMAN'THEN                                 --如果为销售职员,加薪12%UPDATE scott.empSET sal = sal*(1 +c_salesman)WHERE CURRENT OF c_emp; ELSIF v_job = 'MANAGER'THEN                                 --如果为经理,加薪15%UPDATE scott.empSET sal = sal*(1 + c_manager)WHERE CURRENT OF c_emp;END IF;DBMS_OUTPUT.put_line ('已经为员工'|| v_empno|| ':'|| v_ename|| '成功加薪');END LOOP;CLOSE c_emp;                           --关闭游标EXCEPTIONWHEN NO_DATA_FOUNDTHEN                                   --处理PL/SQL预定义异常DBMS_OUTPUT.put_line('没有找到员工数据');END;                  

使用游标,我的理解是两个线程,一个专门跑循环,另一个则是游标时时去获取数据,不知道理解的对不对,望大佬解答

Oracle中cursor的介绍和使用,以及自己对cursor的理解相关推荐

  1. oracle nvl函数3个参数,oracle中的函数介绍(一):nvl函数、decode函数、case when函数、sum函数...

    最近做项目接触到的oracle数据库比较多,经常用到里面的一些函数,以前的博客中也介绍过行转列和列转行,这次再简单给大家介绍几个: nvl() NVL(a,b)就是判断a是否是NULL,如果不是返回a ...

  2. Oracle中dblink简单介绍

    前言 之前学习一直使用的Mysql数据库,现在再公司是改用了Oracle数据库.对Oracle数据库的了解还是比较少的,这次接触到了dblink,那就刚好写一篇文章来记录一下. 什么是dblink d ...

  3. oracle中同义词的用法,Oracle中使用同义词介绍

    一.背景 有两个sid:Asid,Bsid,在Asid下有两个用户Auser1,Auser2,在Bsid下有一个用户Buser1.其中Auser2和Buser1建立了dblink.现希望通过登录Bus ...

  4. oracle两个约束,Oracle中的约束介绍(2)

    CREATE OR REPLACE FUNCTION GETREFERENCESCOLUMN ( i_table_name varchar2 , --表名 i_constraint_name varc ...

  5. oracle中sga可以共享么,关于共享段与SGA的一点理解

    关于共享段与SGA的一点理解 上一周买了两本书,google了不少文档资料,看了看部分linux源代码终于有了以下一些理解.不知对不对 一 各类地址概念 1 逻辑地址:我们一般在用汇编语言写程序时可能 ...

  6. oracle db_files,如何解决 Oracle 中 DB_FILES 限制引起的 ORA-00059 问题

    ​Oracle 数据库中 DB_FILES 定义了数据库中数据文件的个数 如果创建数据库文件时超过DB_FILES 定义的值就回报 ORA-00059 这个错误. 那么如何解决这个 ORA-00059 ...

  7. oracle中的NVL,NVL2,NULLIF,COALESCE函数使用

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  8. oracle怎么声明nvl函数,[转载]Oracle中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  9. Oracle中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  10. Oracle中游标Cursor介绍

    转自:http://zohan.group.iteye.com/group/wiki/2278-cursor Oracle中游标Cursor介绍 一  概念 游标是SQL的一个内存工作区,由系统或用户 ...

最新文章

  1. 图文剖析:单点登录常见解决方案实现原理
  2. MetaPhlAn2-增强版宏基因组分类谱工具
  3. 追寻大师的脚步 | 张正友忆华人计算机视觉宗师 Thomas S. Huang
  4. 别忘了在使用MES系统之前,还有关键一步!
  5. 将csv文件导入到mysql数据库
  6. WEB应用之网页数据分析工具
  7. zookeeper做集群后启动不了,大部分原因是防火墙未关闭
  8. 【ssi】增删改查六操作小框架(八)
  9. matlab多变量优化,matlab - Matlab使用fminsearch优化多变量 - 堆栈内存溢出
  10. Anroid推送服务
  11. day13-(事务mvc反射补充)
  12. Redis4.0.13 安装踩雷记录
  13. 二维数组转化稀疏数组
  14. mysql原理以及相关优化
  15. bootstrap——强大的网页设计元素模板
  16. linux 安装tomcat
  17. oracle 查询某天的数据
  18. 1分钟彻底搞懂关于nginx的proxy_pass
  19. Linux删除所有文件之后的恢复快照恢复
  20. Linux 下查询 DNS 服务器信息

热门文章

  1. Scrapy框架-创建项目
  2. 数据库(SQL)的全面总结
  3. XGBoost算法梳理
  4. 后台数据展示到页面上的过程(vue)
  5. 【threejs】render方法,渲染区域为黑色
  6. zigbee NWK层API解析
  7. C++11创建线程/多线程
  8. 打怪小游戏(取名修仙之路)进度66%
  9. iPhoneX官网停售了,价格会暴跌吗?
  10. MySQL学习(14)︱复合索引与覆盖索引