MySQL游标_oracle游标超限

MySQL游标_oracle游标超限1.简单介绍从MySQL5开始添加了对游标(cursor)的支持,使用游标可以很方便的在查询出来的结果集上获取第一行、最后一行、上一行或下一行等一系列的操作。游标是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。MySQL游标只能用于存储过程和函数中。2….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1. 简单介绍

从 MySQL 5 开始添加了对游标(cursor)的支持,使用游标可以很方便的在查询出来的结果集上获取第一行、最后一行、上一行或下一行等一系列的操作。

游标是一个存储在 MySQL 服务器上的数据库查询,它不是一条 SELECT 语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

MySQL游标只能用于存储过程和函数中。

2. 定义和使用游标

2.1 声明游标

DECLARE cursor_name CURSOR FOR select_statement;

Jetbrains全家桶1年46,售后保障稳定

select_statement 的结果集对应当前定义的游标。
【注意】

这时还没有开始检索数据。select_statement 中不能有INTO子句。

2.2 打开游标

OPEN cursor_name;

在定义了游标之后就可以使用 “OPEN” 关键字打开游标,这时会执行(select_statement)查询得到结果集。

默认情况,游标的指针一开始是指向结果集的第一行之前的。

2.3 使用游标

FETCH cursor_name INTO var_name [, var_name] ...

使用 “FETCH” 和 “INTO” 关键字将当前游标所指向的记录的字段值赋值给定义好的变量中。

每执行一次 “FETCH” 语句,指针向下移动一行。

select_statement 结果集的字段数(列数)必须要和 “INTO” 后面的变量一致,否则会报错。

2.4 关闭游标

CLOSE cursor_name;

“CLOSE” 将释放游标使用的所有内部内存和资源。

如果游标未被明确地关闭,游标将在它被声明的复合语句的末尾(END)被自动关闭。

游标关闭后就不可以继续使用了,除非使用 “OPEN” 再次打开该游标。

存储过程结束后,游标也就消失了。

3. 循环游标

游标一般都是和循环语句配合使用的,否则毫无意义。循环游标有三种方式。

3.1 LOOP语句

-- LOOP语句定义
[begin_label:] LOOP
    statement_list
END LOOP [end_label];

-- LOOP通常伴随着一个LEAVE语句,用于退出循环
[begin_label:] LOOP
    statement
    IF [condition] THEN
        LEAVE [label];    -- 跳出游标循环  
    END IF;
    statement
END LOOP [end_label];

“begin_label” 必须要指定(名称自定义);“LEAVE” 后面的 “label” 也必须要指定,且名称要和 “begin_label” 相同;“end_label” 可以指定也可以不指定,如果指定了就必须要和 “begin_label” 相同。

如果有多个 “LOOP” 语句在同一个游标中(即多个 “LOOP” 之间没有关闭并重新打开过游标),则在下一个 “LOOP” 中游标的指针是继续往下走的,而不是重新从第一行之前开始。

3.2 REPEAT语句

-- REPEAT语句定义
[begin_label:] REPEAT
    statement_list
UNTIL
    condition
END REPEAT [end_label];

当条件 “condition” 成立时,跳出当前循环。

“begin_label” 和 “end_label” 都可以指定或不指定,但如果指定了 “end_label” 就必须要指定 “begin_label” 且两者要相同。

3.3 WHILE语句

[begin_label:] WHILE condition DO
    statement_list
END WHILE [end_label];

当条件 “condition” 不成立时,退出当前循环。

“begin_label” 和 “end_label” 都可以指定或不指定,但如果指定了 “end_label” 就必须要指定 “begin_label” 且两者要相同。

4. 游标溢出

循环游标时,游标本身是不会监控是否到最后一条数据了,当游标已经指向最后一行时继续执行就会造成游标溢出。

游标溢出时会引发 MySQL 预定义的 “NOT FOUND”(也叫 “SQLSTATE ‘02000’ ”)错误。

下面以 WHILE 循环作为一个示例:

DECLARE done INT DEFAULT true;	-- 定义变量
DECLARE cursor_name CURSOR FOR select_statement; -- 定义游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = false; -- 溢出处理
-- 或: DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = FALSE;
WHILE done DO
    FETCH cursor_name INTO var_name [, var_name] ...
END WHILE;

【注意】

溢出处理必须定义在游标声明之后。

 

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

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

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


相关推荐

  • js原生判断是否是数字类型[通俗易懂]

    js原生判断是否是数字类型[通俗易懂]js判断数字类型汇总最近在写代码的时候,有些逻辑需要判断数字类型,等用到的时候才发现自己了解的方法不太严密,然后就决心查资料汇总了解下有哪些方法比较严密第一种:typeof+isNaN使用typeof可以判断是否是一个数字类型,但是NaN也是数字类型,为了筛除这个可能,进一步通过isNaN来筛除。这种方法会遗漏InfinityfunctionisNumber(num){ retu…

    2022年6月28日
    24
  • mac navicate 15激活码【2021免费激活】

    (mac navicate 15激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    85
  • stm32收发 wiegand 韦根协议开发详解

    stm32收发 wiegand 韦根协议开发详解在刚开始接触到韦根接口时,知道这是一种门禁相关的传输协议。其中有两种比较常用的韦根数据格式,韦根26和韦根34,其中韦根26是开放的,韦根34开不开放我不知道(看样子不开放),但是在网上还是能看到韦根34的代码协议,下面介绍一下韦根26以及韦根34的相关内容。Wiegand26格式:各数据位的含义:第1位: 为输出数据2—13位的偶校验位第2-9位:…

    2025年7月13日
    2
  • 计算机中二进制减法的问题是什么_二进制的减法运算例子

    计算机中二进制减法的问题是什么_二进制的减法运算例子有一道作业题,要求完成下列二进制数的减法运算:   00001100-11110111这道题分析说先把减数化成补码的形式,也就是要把11110111化成补码。如果把一个二进制数化成补码,先在最高位取1,再把各位取反加1。但是上面那个题它的第一位已经是1了,怎么化呀??悬赏分:0-解决时间:2010-3-1221:21;—————————–

    2022年9月24日
    2
  • Statement 和 PreparedStatement之间的关系和区别

    Statement 和 PreparedStatement之间的关系和区别关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高表示预编译的SQL语句的对象。接口:publicinterfacePreparedStatementextendsStatement之间的继承关系SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用此对象多次高效地执行该语句。注:用于设置IN参数值的设置方法(setShort

    2022年4月28日
    59
  • linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]

    linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]需求描述:  今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少,  我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22,  在此做下记录.操作过程:1.使用sftp默认的端口号进行登录aiuap_cj@cuchc802:~>sftpaisftp@10.124.163.133aisftp@10.124.163.13…

    2022年9月14日
    4

发表回复

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

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