阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle基础之游标的理解与使用

425次阅读
没有评论

共计 3132 个字符,预计需要花费 8 分钟才能阅读完成。

关于游标,首先要知道游标的定义。游标,是内存中的一款区域,用来存放 select 的结果集游标用来处理从数据库中检索的多行记录(使用 select 语句)。利用游标,程序可以逐个的处理和遍历一次索引返回的整个记录集。

在 Oracle 数据库中,存在两种游标:

一、显示游标(需要明确定义)

显示游标被用于处理返回多行数据的 select 语句,游标名通过 CURSOR…IS 语句显示的赋给 select 语句。

在 PL/SQL 中处理显示游标的四个步骤:

1)声明游标:CURSOR  IS select 语句

2)为查询打开游标:OPEN 游标名称

3)取得结果放入 PL/SQL 变量中:

FETCH 游标名称 INTO list_of_variables;

              FETCH  游标名称    INTO PL/SQL_record;

4)关闭游标:CLOSE 游标名称

注意:在声明游标时,select 语句不能包含 INTO 子句。当使用显示游标时,INTO 子句是 FETCH 语句的一部分。

二、隐式游标
      所有的隐式游标都被假设为只返回一条记录。
      使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL 隐含地打开、处理,然后关掉游标。
      例如:
      …….
      SELECT studentNo,studentName

      INTO curStudentNo,curStudentName

      FROM StudentRecord

      WHERE name=’gg’;

      上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL 变量 curStudentNo,curStudentName 中已经有了值。
  2、隐式游标
    单条 sql 语句所产生的结果集合
      用关键字 SQL 表示隐式游标
        4 个属性 %rowcount  影响的记录的行数  整数
                %found    影响到了记录 true
                %notfound  没有影响到记录 true
                %isopen    是否打开  布尔值 永远是 false
        多条 sql 语句 隐式游标 SQL 永远指的是最后一条 sql 语句的结果
        主要使用在 update 和 delete 语句上     

实际操作和例子:

  (1)FOR 循环游标 (常用的一种游标)

 –<1> 定义游标
 –<2> 定义游标变量
 –<3> 使用 for 循环来使用这个游标

  – 前向游标 只能往一个方向走
  – 效率很高
      declare
        – 类型定义
        cursor cc is select empno,ename,job,sal
        from emp where job = ‘MANAGER’;
        – 定义一个游标变量
        ccrec cc%rowtype;
      begin
        –for 循环
        for ccrec in cc loop
            dbms_output.put_line(ccrec.empno||’-‘||ccrec.ename||’-‘||ccrec.job||’-‘||ccrec.sal);
        end loop;     
      end;
  (2) fetch 游标
    – 使用的时候 必须要明确的打开和关闭
      declare
        – 类型定义
        cursor cc is select empno,ename,job,sal
        from emp where job = ‘MANAGER’;
        – 定义一个游标变量
        ccrec cc%rowtype;
      begin
        – 打开游标
        open cc;
        –loop 循环
        loop
            – 提取一行数据到 ccrec 中
            fetch cc into ccrec;       
            – 判断是否提取到值,没取到值就退出
            – 取到值 cc%notfound 是 false
            – 取不到值 cc%notfound 是 true
            exit when cc%notfound;
            dbms_output.put_line(ccrec.empno||’-‘||ccrec.ename||’-‘||ccrec.job||’-‘||ccrec.sal);           
        end loop;
        – 关闭游标
        close cc; 
      end;
  游标的属性 4 种
      %notfound  fetch 是否提到数据 没有 true 提到 false
      %found      fetch 是否提到数据 有 true 没提到 false
      %rowcount  已经取出的记录的条数
      %isopen    布尔值 游标是否打开
  (3) 参数游标
 按部门编号的顺序输出部门经理的名字
    declare
      – 部门
      cursor c1 is select deptno from dept;
      – 参数游标 c2, 定义参数的时候
      – 只能指定类型, 不能指定长度 
      – 参数只能出现在 select 语句 = 号的右侧
      cursor c2(no number,pjob varchar2) is select emp.* from emp
        where deptno = no and job=pjob;
      c1rec c1%rowtype;
      c2rec c2%rowtype;
      – 定义变量的时候要指定长度
      v_job varchar2(20);
    begin
      – 部门
        for c1rec in c1 loop
          – 参数在游标中使用
          for c2rec in c2(c1rec.deptno,’MANAGER’) loop
            dbms_output.put_line(c1rec.deptno||’-‘||c2rec.ename);
          end loop;
        end loop;
    end;
  (4) 引用游标 / 动态游标
      — select 语句是动态的
    declare
      – 定义一个类型(ref cursor) 弱类型   
      type cur is ref cursor;
        – 强类型(返回的结果集有要求)
      type cur1 is ref cursor return emp%rowtype;
      – 定义一个 ref cursor 类型的变量 
      cura cur;
      c1rec emp%rowtype;
      c2rec dept%rowtype;
    begin
  DBMS_output.put_line(‘ 输出员工 ’)  ;     
      open cura for select * from emp;
      loop
        fetch cura into c1rec; 
        exit when cura%notfound;
        DBMS_output.put_line(c1rec.ename)  ;
      end loop ;
  DBMS_output.put_line(‘ 输出部门 ’)  ;
      open cura for select * from dept;
      loop
        fetch cura into c2rec; 
        exit when cura%notfound;
        DBMS_output.put_line(c2rec.dname)  ;
      end loop; 
      close cura;
    end;

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147866.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3132字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7961411
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...