Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle11g全新讲解之游标

Oracle11g全新讲解之游标

作者头像
用户4919348
发布于 2023-05-27 06:22:53
发布于 2023-05-27 06:22:53
48500
代码可运行
举报
文章被收录于专栏:波波烤鸭波波烤鸭
运行总次数:0
代码可运行

游标

游标的作用:处理多行数据,类似与java中的集合

1.隐式游标

  一般是配合显示游标去使用的,不需要显示声明,打开,关闭,系统自定维护,名称为:sql

常用属性:

  • sql%found:语句影响了一行或者多行时为true
  • %NOTFOUND:语句没有任何影响的时候为true
  • %ROWCOUNT:语句影响的行数
  • %ISOPEN:游标是否打开,始终为false

案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
begin
           update t_student set age=20 ;
  
           if sql%found then
               dbms_output.put_line('修改成功,共修改了   ' ||  sql%rowcount  || '   条记录');
             else
                 dbms_output.put_line('没有这个学生');
             end if;
   
            -- commit ;-- 提交应该要放在隐式游标后面
        end ; 

2.显示游标

  显式游标在PL/SQL块的声明部分定义查询,该查询可以返回多行,处理多行数据

实现步骤:

  1. 声明一个游标
  2. 打开游标
  3. 循环提取数据
  4. 关闭游标

案例:

a) 无参数 :查询所有学生信息,并显示出学生姓名,性别,年龄

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 步骤:1.声明一个游标  2.打开游标  3.循环提取数据 4.关闭游标
-- 查询所有的学生信息。并且显示学生的姓名,年龄和性别
declare
   v_row t_student%rowtype;
   -- 1.游标的声明
   cursor mycursor is select * from t_student ;
begin
    -- 2.打开游标
    open mycursor;
  
    -- 3.循环提取数据
    loop
        fetch mycursor into v_row;
        -- 找到出口
        exit when mycursor%notfound;
        dbms_output.put_line(v_row.name||'-'||v_row.gender||'-'||v_row.age);
    end loop;
    -- 4.关闭游标
    close mycursor;
end;

b) 有参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
          v_sex varchar2(4) :='&请输入性别' ;
           v_row t_student%rowtype ;
           cursor mycursor(p_sex varchar2) is select * from t_student where sex=p_sex ; -- 注:参数的类型不要指定长度大小
        begin
           open mycursor(v_sex) ;-- 2、打开游标
           loop
               fetch mycursor into v_row;
                  exit when mycursor%notfound;
               dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
   
           end loop; 
           close mycursor;--  4、 关闭游标
        end ;   

c ) 循环游标. 简化 游标 for:不需要打开游标 也不需要关闭游标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
          v_sex varchar2(4) :='&请输入性别' ;
           cursor mycursor(p_sex varchar2) is select * from t_student where sex=p_sex ; -- 注:参数的类型不要指定长度大小
        begin
   
          for v_row   in  mycursor(v_sex)    loop
               dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);  
           end loop; 
   
        end ;   

d) 使用显式游标更新行:

允许使用游标删除或更新活动集中的行,声明游标时必须使用 select … for update 语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
          v_sex varchar2(4) :='&请输入性别' ;
           v_row t_student%rowtype ;
           cursor mycursor(p_sex varchar2) is select * from t_student where sex=p_sex  for update; -- 注:参数的类型不要指定长度大小
        begin
           open mycursor(v_sex) ;-- 2、打开游标
           loop
               fetch mycursor into v_row;
                  exit when mycursor%notfound;
              -- dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
   
               update t_student set age = age +10 where current of mycursor;
   
           end loop; 
           --commit ;
           close mycursor;--  4、 关闭游标
        end ;   

3.REF游标

  处理运行时动态执行的 SQL 查询,特点:

优点:

  1. 动态SQL语句
  2. 在存储过程中可以当参数

缺点:

  1. 不能使用循环游标for
  2. 不能使用游标更新行

使用步骤:

  1. 定义一个ref的类型
  2. 声明游标
  3. 打开游标
  4. 提取数据
  5. 关闭游标

案例讲解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
         v_sex varchar2(4) ;
       --type mytype is ref cursor return t_student%rowtype; -- 强类型的 ref 游标类型
         type mytype is ref cursor  ;   --  1)弱类型的 ref 游标类型
         mycursor mytype;   --  2) 声明游标
         v_sql varchar2(100) ;
         v_row t_student%rowtype ;
     begin
         v_sql :=' select * from t_student ' ;
  
        -- open mycursor for select * from t_student; 
         open mycursor for v_sql ;
         loop
             fetch mycursor into v_row ;
             exit when mycursor%notfound ;
             dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
         end loop;
         close mycursor ;  
   
     end ;

可以使用sys_refcursor类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
         v_stuname t_student.stuname%type :='&请输入名字' ;
           v_sex varchar2(3) :='&请输入性别' ;
  
         mycursor  sys_refcursor ;   --  2) 声明游标
         v_sql varchar2(100) ;
         v_row t_student%rowtype ;
     begin
   
          v_sql :='select * from t_student  where  1=1 ';
   
             if  v_stuname is not null then 
                 v_sql :=v_sql  || '  and stuname like  ''%'  || v_stuname || '%'' ' ;
              end if;  
  
            if  v_sex is not null then
                   v_sql :=v_sql || '  and sex = '''  || v_sex || ''' ' ;
            end if;
  
            dbms_output.put_line('v_sql= ' || v_sql );
   
  
        -- open mycursor for select * from t_student; 
         open mycursor for v_sql ;
         loop
             fetch mycursor into v_row ;
             exit when mycursor%notfound ;
             dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
         end loop;
         close mycursor ;  
   
     end ;

游标的小结:

  • 游标用于处理查询结果集中的数据
  • 游标类型有:隐式游标、显式游标和 REF游标
  • 隐式游标由 PL/SQL 自动定义、打开和关闭
  • 显式游标用于处理返回多行的查询
  • 显式游标可以删除和更新活动集中的行
  • 要处理结果集中所有记录时,可使用循环游标
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
斯坦福大学密码学-绪论 01
争取这周看完斯坦福大学Dan Boneh 教授的密码学课程,fighting !!!
Daffy
2020/11/02
1K0
通过云环境部署Hexo静态博客
建议在阅读本教程前先学会如何使用hexo。<font color=red>此教程不是零基础学会hexo系列。</font>
Dreamy.TZK
2020/04/03
4300
通过云环境部署Hexo静态博客
Unity3D基础项目(三):花费一天做个小游戏水果忍者
最近看了很多教程,代码方面大同小异,主要看思路,即编程思想。所以仿照着做了一款水果忍者,一天就够了。 开发工具:Unity3D(本人使用5.4版本),VS2015 周期:一天 准备:UI素材,声音段(素材来源于网络,如有侵权,请联系我删除)
孙寅
2020/06/02
2.3K1
Outlook技巧合并版
1.Outlook设置(详看各邮箱说明) 2.Outlook签名设置 1.png 2.png 3.Outlook清理邮件 邮箱大于2G就不能发送邮件,直接删除会丢失数据, 正确的办法是把服务器上
林万程
2018/06/26
1.8K0
【技术分享】机器学习之回归原理详述(一)
导语:本文用了从数学层面和代码层面,再结合一些通俗易懂的例子,详细地描述了回归主要涉及的原理和知识,希望对于机器学习的初学者或者有兴趣研究模型具体实现的同学带来一点帮助。
腾讯云TI平台
2019/08/27
6.7K0
【爬虫知识】浏览器开发者工具使用技巧总结
常见禁用开发者工具手段:https://blog.csdn.net/cplvfx/article/details/108518077
K哥爬虫
2021/08/03
2.5K0
【爬虫知识】浏览器开发者工具使用技巧总结
斯坦福大学密码学-流密码 02
有效加引号:理论上:必须在多项式时间内完成。应用上:在特定时间内完成(例如:一分钟内加密1G的数据)。
Daffy
2020/11/02
2K0
【技术分享】机器学习之SVM - 理论知识
导语:本文用一些简单的例子来解释了SVM是什么,然后通过SVM中最大间隔、核函数、软间隔、SMO四个关键部分,依次进行数学推导和解释。
腾讯云TI平台
2019/09/11
1.1K0
【字节跳动】第十五讲 微服务架构原理与治理实践| 青训营笔记
周余发:2018年硕士毕业,曾在美团点评研发效率中心、抖音服务架构担任系统开发。目前为字节跳动Service Mesh研发人员。
了凡银河系
2022/08/22
7870
【字节跳动】第十五讲 微服务架构原理与治理实践| 青训营笔记
tomcat通用回显链从0到1
Demo package com.naihe; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.B
红队蓝军
2022/03/25
4870
tomcat通用回显链从0到1
【字节跳动】第十六讲 走进消息队列| 青训营笔记
创建集群 --> 新增 Topic --> 编写生产者逻辑 --> 编写消费者逻辑
了凡银河系
2022/08/22
2K0
【字节跳动】第十六讲 走进消息队列| 青训营笔记
小程序物流快递单号查询接口对接指南
小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。对于开发者而言,小程序开发门槛相对较低,难度不及APP,能够满足简单的基础应用,适合生活服务类线下商铺以及非刚需低频应用的转换,也比较适合初创公司创业阶段用来“试错”的产品,在开发成本、用户体验、运营方式、迭代更新方面小程序都很有优势。
用户4199839
2019/07/16
6.1K0
小程序物流快递单号查询接口对接指南
「玩转腾讯云」API网关+云函数SCF开启OAuth2.0认证实战
如果在按照教程测试的时候遇到服务调用失败的情况,可以直接跳到第五步,查看以下避坑指北呦!
shwinpiocess的技术之路
2020/06/04
2.4K0
Latex中也能展示动态图?
在学术领域,很多文档是用Latex做的,甚至有很多人用Latex Beamer来做PPT演示文稿。虽然在易用性和美观等角度来说,Latex Beamer很大程度上不如PowerPoint,但是Beamer这种浓厚的学术色彩还是受到了很多人的喜好。但是我们知道Latex生成的文档一般是用pdf格式来存储的,如果放一个gif动态图进去,就可能会变成一个静态图,那就没办法展示整个动态的过程了。幸运的是,Latex还有一种比较麻烦的方法,对动态图也做了一定的支持。本文所使用的案例,是一个比较热门的猴痘病毒蛋白的松弛过程。碍于动态图比较大,在博客里面放不下,故只能用这种链接索引+静态图展示的方案。
DechinPhy
2022/10/05
6620
Latex中也能展示动态图?
Zabbix 企业级分布式监控
在 部 署 Zabbix Server 之 前 , 首 先 要 配 置 LNMP 环 境 , LNMP 是 Linux+Nginx+MySQL+PHP 的简写,是 Linux 系统下常用的 php 脚本语言运行环境。
不凡
2021/08/04
7130
Zabbix 企业级分布式监控
鹅厂优文 | 企点PC端性能测试-UI卡顿分析
本文以一个企点融合工作台测试中发现的案例说明如何获得UI卡顿数据,以及如何分析数据,定位问题。
鹅厂优文
2018/04/02
4.5K9
鹅厂优文 | 企点PC端性能测试-UI卡顿分析
斯坦福大学密码学-分组密码 03
典型的分组密码以迭代的形式构建。输入密钥k,然后将密钥扩张成一系列的回合密钥 到 。使用这些回合密钥一次又一次的迭代使用回合函数加密明文信息。
Daffy
2020/11/03
2K0
怎样压缩PDF文件大小?简单的步骤是什么?
  PDF文件传输的时候经常因为PDF文件太大无法进行传输,遇到这样的情况我们应该怎样将其进行压缩呢?其实很简单,我们可以借助来进行实现,下面将PDF文件压缩的方法分享给大家,希望可以帮助到有需要的朋友!
用户4838056
2019/07/22
1.4K0
怎样压缩PDF文件大小?简单的步骤是什么?
第三章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统
天蝎座的程序媛
2023/10/17
3.3K0
第三章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统
[原创]PC微信逆向分析のWeTool内部探秘
先不说微信在社交领域的霸主地位,我们仅从腾讯公司所透露的在研发微信过程中踩过的无数的坑,以及公开的与微信相关的填坑的源代码中,我们可以感受到,单从技术上讲,微信是一款非常伟大的产品。然而,伟大的产品,往往会被痴迷于技术的人送进实验室大卸八块,以参悟其伟大之所在!
用户2820087
2019/09/14
2.8K0
[原创]PC微信逆向分析のWeTool内部探秘
推荐阅读
相关推荐
斯坦福大学密码学-绪论 01
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验