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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • decode和encode函数_python lstrip

    decode和encode函数_python lstrip字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编…

    2022年10月6日
    0
  • 最长公共子串 动态规划_最长公共子串 DNA序列

    最长公共子串 动态规划_最长公共子串 DNA序列原题链接题目描述给定两个字符串str1和str2,输出连个字符串的最长公共子序列。如过最长公共子序列为空,则输出-1。输入描述:输出包括两行,第一行代表字符串str1,第二行代表str2。( 1<= length(str1),length(str2)<= 5000)输出描述:输出一行,代表他们最长公共子序列。如果公共子序列的长度为空,则输出-1。示例1输入1A2C3D4B56B1D23CA45B6A输出123456说明”123456″和“12C4B6”都是最长公共

    2022年8月8日
    3
  • 小树311_森林小道

    小树311_森林小道原题链接森森开了一家快递公司,叫森森快递。因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号。由于道路限制,第i号城市(i=0,⋯,N−2)与第(i+1)号城市中间往返的运输货物重量在同一时刻不能超过C​i​​ 公斤。公司开张后很快接到了Q张订单,其中j张订单描述了某些指定的货物要从S​j​​ 号城市运输到T​j​​ 号城市。这里我们简单地假设所有货物都有无限货源,森森会不定时地挑选其中一部分货物进行运输。安全起见,这些货物不会在中

    2022年8月9日
    3
  • 操作系统概念第七章部分作业题答案

    操作系统概念第七章部分作业题答案题目一:考虑下图所示的交通死锁的情况:(1)请说明这个实例中死锁的4个必要条件(2)请设计一条简单的规则来避免产生死锁解答:(1):死锁的四个必要条件是:①互斥:至少一个资源非共享,即一次只能有一个进程使用②占有并等待:一个进程至少占有一个资源,并等待另一个资源,而该资源被其他进程所占有③非抢占:资源非抢占,只有当前进程完成任务才能被释放④循环等待:有一组等待进城P0…P…

    2022年7月14日
    15
  • android默认打开方式修改_setcontenttype方法

    android默认打开方式修改_setcontenttype方法android打开文件,intent的使用

    2022年10月14日
    0
  • Zookeepers_docker workdir

    Zookeepers_docker workdir文章目录Curator客户端创建会话创建节点获取节点和数据更新数据删除节点事务节点存在事件监听其他工具类开发测试Curator客户端Curator包含了几个包:curator-framework:对zookeeper的底层api的一些封装curator-client:提供一些客户端的操作,例如重试策略等curator-recipes:封装了一些高级特性,如:Cache事件监听、选举…

    2022年10月24日
    0

发表回复

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

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