MySql必知必会实战练习(六)游标

游标主要用于交互式应用,滚动屏幕上的数据,并对数据进行浏览或做出更改看一下下面的例子:输出:由于结果为多行无法显示,这时我们就需要使用游标来操作1.游标基本方法(1)创建游标(2)打开游

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

  游标主要用于交互式应用,滚动屏幕上的数据,并对数据进行浏览或做出更改

  看一下下面的例子:

drop procedure IF EXISTS processorders;
create procedure processorders(
    out ordernum int
)
begin
    select order_num from orders into ordernum;
end;

call processorders(@ordernum);
select ordernum;

  输出:

  MySql必知必会实战练习(六)游标

  由于结果为多行无法显示,这时我们就需要使用游标来操作

 1. 游标基本方法

(1)创建游标

create procedure processorders()
begin
    declare ordernums cursor for     select order_num from orders;
end;

 (2)打开游标

open ordernums;

(3)关闭游标

close ordernums;

  在一个游标关闭后,如果没有重新打开,则不能使用它。

  使用申明过的游标不需要再次声明,用open语句打开它就可以了。

2.游标使用示例

drop procedure IF EXISTS processorders;
create procedure processorders(
    out numbers int,
    out custid int
)
begin
    #声明游标
    declare ordernums cursor for
    select order_num,cust_id from orders;
    
    #打开游标
    open ordernums;
    
    #用来检索当前行的order_num(自动从第一行开始)
    fetch ordernums into numbers, custid;  
    
    #关闭游标
    close ordernums;
end;

call processorders(@numbers,@custid);
select @numbers,@custid;

   会看到只输出了第一行的order_num和cust_id:

MySql必知必会实战练习(六)游标

  继续,接下来将循环检索数据,从第一行到最后一行:

drop procedure IF EXISTS processorders;
create procedure processorders(
    out numbers int,
    out custid int
)
begin
    declare done boolean default 0;
    #声明游标
    declare ordernums cursor
    for
    select order_num,cust_id from orders;
    
    #声明CONTINUE HANDLER
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;     
    #打开游标
    open ordernums;
    
    #开始循环
    REPEAT
        #用来检索当前行的order_num(自动从第一行开始)
        fetch ordernums into numbers, custid;  
        
 #.....这里可以对每次检索出来的数据进行处理
        
    #结束循环
    UNTIL done END REPEAT;
    
    #关闭游标
    close ordernums;
end;

call processorders(@numbers,@custid);
select @numbers,@custid;

   我们会看出输出最后一行的order_num和cust_id

MySql必知必会实战练习(六)游标

  这样就实现了数据的循环检索,我们可以在 (#…..这里可以对每次检索出来的数据进行处理)注释处对每次检索出来的数据进行处理

  注意:上面我们定义了一个COUNtINUE HANDLEr,它是在条件出现时执行的代码,它指出SQLSTATE ‘02000’出现时set done = 1,最开始SQLSTATE ‘02000’是一个未找到的条件,只有当repeat没有更多的行供循环时才会出现SQLSTATE ‘02000’

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux小红帽网卡设定,linux下网卡如何开启flow control「建议收藏」

    linux小红帽网卡设定,linux下网卡如何开启flow control「建议收藏」Whatisawife?Beyouwouldliketohandovertoherthesavingsthepreservationofwoman.Whatisalover?Beyougosecretivelyandshedatesagainafraidthewiferunintoofwoman.Whatisabeauty…

    2022年5月18日
    42
  • 什么是5g微基站(三大运营商基站数量)

    大家都知道,要想使用5G网络,必须要有5G基站做支撑,那么5G基站长啥样,又是如何建成的呢?▲中国移动的5G天线设备▲北斗+GPS的双星授时设备5G天线设备、北斗+GPS的双星授时设备两…

    2022年4月11日
    110
  • AutoEventWireup=“true” 属性

    AutoEventWireup=“true” 属性AutoEventWireupAutoEventWireup=“true” :自动事件匹配asp.net(AutoEventWireup属性的确切含义)使用Asp.NET时,新建的aspx页面第一行page指令中包含了一个AutoEventWireup属性。网上的很多教程认为这一属性,甚至这一行代码都是没用的。其实,这是不了解Asp.NET事件处理模型的表现。简单

    2022年5月28日
    26
  • JVM内存模型详解(1.7与1.8的区别)[通俗易懂]

    JVM内存模型详解(1.7与1.8的区别)[通俗易懂]文章目录1.JDK、JRE、JVM关系2.JAVA程序的运行(为什么java可以跨平台)3.JVM运行时数据区1.JDK、JRE、JVM关系从图中就可以很清晰的看清他们之间的关系:JDK>JRE>JVM2.JAVA程序的运行(为什么java可以跨平台)比如我们编写一个HelloWord.java,他是如何运行的呢因为有JVM,所以我们在不同平台只需要下载对应的JDK即可…

    2022年5月16日
    43
  • python 0o_python中0o1010是多少

    python 0o_python中0o1010是多少python0o1010是多少?它以0开头,满足八进制的要求,是个八进制的数,下面来了解一下整数的四种表现形式:对于整数:有四种表现形式二进制:0,1满2进1八进制:0-7满8进1,用0开头表示十进制:0-9满10进1十六进制:0-9,A-F满16进1,用0x表示位(bit):存储信息的最小单位,表示一个二进制数字。字节(Byte):一个字节由8位二进制数字组成(1Byte=8bit)…

    2022年6月24日
    39
  • AE常用表达式汇总「建议收藏」

    很多朋友面对AE表达式望而生畏,不过再难的东西都会有它最本质的规则,如果你理解了基本的原理和常用的表达式命令,这也许会提高你的工作效率。我通过自己对AE表达式的理解,尝试用最简单的语言解释一些看似复杂的操作,如果此篇文章能给你带来一些启发,不胜荣幸~首先什么是表达式呢?表达式就是AE内部基于JS编程语言开发的编辑工具,可以理解为简单的编程,不过没有编程那么复杂。其次表达式只能添加在可以编辑的关建帧的属性上,不可以添加在其他地方;表达式的使用根据实际情况来决定,如果关键帧可以更好的实现你想要的效果,使

    2022年4月6日
    352

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号