文章目录

  • 一、什么是游标
  • 二、游标的作用
  • 三、什么时候避免使用游标
  • 四、游标的类型
    • 1. 静态游标
      • 1.1 显式游标
      • 1.2 隐式游标
    • 2. 动态游标(REF游标)
      • 2.1 强类型游标
      • 2.2 弱类型游标
  • 五、游标的语法结构
  • 六、游标的使用案例
    • 读取单行记录
      • 案例1:使用游标查询emp表中员工的姓名和工资
      • 案例2:使用游标查询emp表中所有员工的姓名
    • 游标的多行读取(loop循环、while循环和for循环)
      • 案例1:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出(loop循环)
      • 案例2:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出(while循环)
      • 案例3:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出(for循环)
    • 带参数的游标
      • 案例1:使用游标根据员工标号获取emp表中的员工姓名
      • 案例2:使用游标查询并打印某部门的员工的姓名和薪资,部门编号为运行时手动输入

一、什么是游标

游标:用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行
结果集,在每条结果集上做操作
从表中检索出结果集,从中每次指向一条记录进行交互的机制。
用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,以及是否能够在结果集中向前和/或向后移动(可滚动性)。
游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。
换句话说,游标从概念上讲基于数据库的表返回结果集。
游动的光标(指针),可以指向一个结果集,通过游标的移动逐行提取每一行的记录 。
用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。
用来存储多条查询数据的一种数据结构(结果集),它有一个指针,用来从上往下移动,从而达到遍历每条记录的作用。
由于它指示结果集中的当前位置 ,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。
用于临时存储一个查询返回的多行数据(结果集,类似于Java的Jdbc连接返回的ResultSet集合),通过遍历游标,可以逐行访问处理该结果集的数据。

二、游标的作用

  1. 指定结果集中特定行的位置
  2. 基于当前的结果集位置检索一行或连续的几行
  3. 在结果集的当前位置修改行中的数据
  4. 对其它用户所做的数据更改定义不同的敏感性级别
  5. 可以以编程的方式访问数据库

程序语言是面向记录的,一组变量一次只能存放一个变量或者一条记录,无法直接接收数据库中的查询结果集引入游标就解决了这个问题。

三、什么时候避免使用游标

在想要使用游标的时候应该考虑:“是否有办法避免使用游标?”
因为游标的效率较差,如果游标操作的数据超过一万行,就应该改写代码了。
如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

四、游标的类型

游标分为 静态游标动态游标

1. 静态游标

1.1 显式游标

用户显示声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标。用户自己写的sql语句,编译时能明确知道sql语句

1.2 隐式游标

所有DML语句(增、删、改、查询单条记录)为隐式游标,该变量名不需要用户自己声明,它由系统帮我们定义,叫SQL。使用时不需要声明隐式游标,它由系统定义。
隐式游标的使用:通过**%rowcour**判断是否使用了。

属性 描述
%found 布尔类型数据,当用户使用DML操作数据时,该属性返回true
%notfound 布尔型数据,如果执行DML操作时没有返回的数据行(在游标中找不到元素的时候)就返回true,否则返回false。通常用来判断是否退出循环。
%isopen 布尔型数据,判断游标是否打开,该属性对任何的隐式游标总是返回false,表示游标已打开。
%rowcount 整型数据,返回更新操作的行数或 select into 返回的行数。

2. 动态游标(REF游标)

是在执行前SQL语句是未知的游标,当执行时才知道所要执行的SQL语句的游标,动态关联结果集的临时对象。

2.1 强类型游标

规定返回类型。

2.2 弱类型游标

不规定返回类型,可以获取任何结果集。

五、游标的语法结构

cursor 游标名称 [(parameter[,parameter]...)]
[return 返回值类型] is selectSQL语句

语法解释:
cursor:声明一个游标
parameter:可选参数,用于指定参数类型、模式等
return:可选,指定游标的返回类型
SQL语句:需要处理的select语句,不能含into子句

--游标的使用方法: 声明 -> 打开 -> 读取 -> 关闭
--1.声明游标
declare
cursor 游标名称[参数列] is selectSQL语句
--2.打开游标
beginopen 游标名称
--3.读取游标数据loopfetch 游标名称 into 变量;exit when 游标名称%notfound;end loop;
--4.关闭游标close 游标名称;
end;

六、游标的使用案例

读取单行记录

案例1:使用游标查询emp表中员工的姓名和工资

declare--声明游标cursor test01 is select ename,sal from emp;--声明一个变量用来存储游标中获取来的数据v_name emp.ename%type;v_sal emp.sal%type;
beginopen test01;fetch test01 into v_name,v_sal;dbms_output.put_line(v_name || ' ' || v_sal);close test01;
end;

案例2:使用游标查询emp表中所有员工的姓名

declare--声明游标cursor test02 is select ename from emp;--声明一个变量用来存储游标中获取来的数据v_name emp.ename%type;
beginopen test02;fetch test02 into v_name;dbms_output.put_line(v_name);close test02;
end;

游标的多行读取(loop循环、while循环和for循环)

案例1:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出(loop循环)

declarecursor cursor1 is select ename,sal from emp;v_ename emp.ename%type;v_sal emp.sal%type;
beginopen cursor1;loopfetch cursor1 into v_ename,v_sal;exit when cursor1%notfound;dbms_output.put_line(v_ename || ' ' || v_sal);end loop; close cursor1;
end;

案例2:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出(while循环)

declarecursor cursor2 is select ename,sal from emp;v_ename emp.ename%type;v_sal emp.sal%type;
beginopen cursor2;fetch cursor2 into v_ename,v_sal;while cursor2%found loopfetch cursor2 into v_ename,v_sal;dbms_output.put_line(v_ename || ' ' || v_sal);end loop; close cursor2;
end;

案例3:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出(for循环)

--for循环自动打开游标,循环结束自动关闭游标
declarecursor cursor3 is select ename,sal from emp;v_ename emp.ename%type;v_sal emp.sal%type;
beginfor cursor3_1 in cursor3 loopv_ename := cursor3_1.ename;v_sal := cursor3_1.sal;dbms_output.put_line(v_ename || ' ' || v_sal);end loop;
end;

带参数的游标

案例1:使用游标根据员工标号获取emp表中的员工姓名

----一般方法
declarecursor cursor1 is select ename from emp where empno=7788;v_name emp.ename%type;
beginopen cursor1;loopfetch cursor1 into v_name;exit when cursor1%notfound;dbms_output.put_line(v_name);end loop;close cursor1;
end;

案例2:使用游标查询并打印某部门的员工的姓名和薪资,部门编号为运行时手动输入

declarecursor cursor1(empno_test emp.empno%type) is select ename,sal from emp where empno=empno_test;v_name emp.ename%type;v_sal emp.sal%type;
beginopen cursor1(7788);loopfetch cursor1 into v_name,v_sal;exit when cursor1%notfound;dbms_output.put_line(v_name || v_sal);end loop;close cursor1;
end;

Oracle数据库 游标相关推荐

  1. oracle 游标 904,如何解决Oracle数据库游标连接超出问题

    如何解决Oracle数据库游标连接超出问题 发布时间:2020-07-21 10:57:35 来源:亿速云 阅读:103 作者:小猪 这篇文章主要讲解了如何解决Oracle数据库游标连接超出问题,内容 ...

  2. oracle利用游标添加数据库,Oracle数据库游标的类型及使用实例全解

    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.Oracle数据库的Cursor类型包含三种: 静态游标:分为显式(explicit)游标 ...

  3. 使用oracle 游标修改数据,修改oracle数据库游标

    SQL游标原理和使用方法 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/chinahuyong/article/details/3552248 SQL ...

  4. oracle数据库连接游标超出,Oracle数据库游标连接超出解决方案

    oracle数据库忽然连不上了,一查是游标数量超了. 1.查看游标数 show parameter open_cursors 2.修改游标数 alter system set open_cursors ...

  5. Oracle数据库游标在存储过程中的使用

      作为关系型数据库市场的老大,Oracla占有举足轻重的地位.虽然在操作上不如SQLSERVER那样方便,但是他的强大的功能<br>还是吸引来大批大批的追随着.本人作为ORACLE菜鸟, ...

  6. Oracle数据库游标数总结

    各用户的打开游标总数 SELECT A.USER_NAME, COUNT(*) FROM V$OPEN_CURSOR A GROUP BY A.USER_NAME; 查找数据库各用户各个终端的缓存游标 ...

  7. oracle数据库游标是什么意思,oracle数据库游标用法详解

    oracle 游标用法详解 1.什么是游标 游标是一种PL/SQL控制结构,可以对SQL语句进行显示控制,便于对表的数据逐条进行处理 2.游标分类 显示游标: Declared and named b ...

  8. Oracle数据库游标操作

    1.含有参数的游标 declare  cursor cur_my (mv number) is select * from Person where no<mv; begin   for tem ...

  9. oracle数据库中游标的使用,oracle数据库游标的使用方法

    游标分为隐式游标和显示游标. 一.隐式游标 对于select * into和DML操作(update.delete.insert)都附带有一个隐式游标. 隐式游标的属性 SQL%ROWCOUNT   ...

最新文章

  1. python中map()函数使用方法
  2. BZOJ3670 [Noi2014]动物园 【KMP计数】
  3. 数据库-ADONET-使用强类型DataSet
  4. DB2数据库常用工具
  5. UA SIE545 优化理论基础2 凸函数 概念 理论 总结
  6. es自建搜索词库_【ES从入门到实战】二十三、全文检索-ElasticSearch-分词-自定义扩展词库...
  7. 什么是服务器信息怎么看,怎么查看服务器信息
  8. 520这天,我突然意识到,她根本配不上我这么聪明的男人!
  9. flume高可用-failover-模型分析
  10. hao123电脑版主页_建议Lenovo用户卸载监守自盗的联想电脑管家
  11. 【JAVA 第五章 】课后习题 删除奇数元素下标 然后再删除值为奇数的下标
  12. 二叉树+链表+字符串+栈和队列高频面试题合集
  13. 计算机硬盘的文件怎么删除文件,如何彻底删除文件?彻底删除硬盘数据的几种方法-电脑教程...
  14. js鼠标移入改变颜色,移除还原
  15. 计算机设计大赛 app一等奖,广商学子在大学生计算机设计大赛中喜获一等奖
  16. 微机原理与接口技术模拟试题微型计算机中主要包括,微机原理与接口技术模拟试题...
  17. 参考文献中英文人名_参考文献英文人名的缩写规则
  18. 在北京注册科技类公司的经历(一):名称预审
  19. WINcc 导出历史数据
  20. uniapp开发微信小程序分享功能

热门文章

  1. 计算机软件著作权取得方式,软件著作权取得方式
  2. 6_iOS干货5_iOS颜色汇总
  3. python绘制图形显示不了_python绘制图形
  4. navicat提权及星外主机注册表mssql密码位置
  5. 【工作流Activiti7】1、入门篇
  6. 通过resign.jar重签名apk后出现raw目录下文件未找到的解决方法
  7. 测试工程师,就得去大厂!软饭硬吃
  8. SuanCloud区块链可信数据平台
  9. 《Total Commander:万能文件管理器》——第6.2节.文件搜索
  10. Access denied for user root. Superuser privilege is required