sql 游标_SQL基础丨游标
游标
游标是一个重要的概念,提供了一种灵活的操作方式,可以从数据结果集中每次提取一条数据记录进行操作。
在SQL中,游标是一种临时的数据库对象,可以指向存储在数据库中的数据行指针。
示例
-查询heros数据表中最大生命值大于8500的英雄有哪些
SELECT id, name, hp_max FROM heros WHERE hp_max > 8500
查询结果
如何使用游标
游标实际上是一种控制数据集的更加灵活的处理方式
使用游标,一般需要5个步骤:
第一步:定义游标
DECLARE cursor_name CURSOR FOR select_statement
语法适用于MySQL,SQL Server,DB2
Oracle或者PostgreSQL需要写成
DECLARE cursor_name CURSOR IS select_statement
注:select_statement代表的是SELECT语句
第二步:打开游标
OPEN cursor_name
当定义好游标之后,想要使用游标,必须先打开游标。打开游标的时候SELECT语句的查询结果集就会送到游标工作区。
第三步:从游标中取得数据
FETCH cursor_name INTO var_name ...
这句的作用是使用cursor_name这个游标来读取当前行,并且将数据保存到var_name这个变量中,游标指针直到下一行。
第四步:关闭游标
CLOSE cursor_name
有OPEN就会有CLOSE,也就是打开和关闭游标。
第五步:释放游标
DEALLOCATE cursor_namec
有SECLARE就需要有DEALLOCATE,DEALLOCATE的作用是释放游标。
游标实战
实例
- 用游标来扫描heros数据表中的数据行,然后累计最大生命值
CREATE PROCEDURE `calc_hp_max`()BEGIN -- 创建接收游标的变量 DECLARE hp INT; -- 创建总数变量 DECLARE hp_sum INT DEFAULT 0; -- 创建结束标志变量 DECLARE done INT DEFAULT false; -- 定义游标 DECLARE cur_hero CURSOR FOR SELECT hp_max FROM heros; OPEN cur_hero; read_loop:LOOP FETCH cur_hero INTO hp; SET hp_sum = hp_sum + hp; END LOOP; CLOSE cur_hero; SELECT hp_sum;END
执行call calc_hp_max()的时候系统会提示1329错误,也就是在LOOP中当游标没有取到数据时会报的错误。
当游标溢出时(也就是当游标指向最后一行数据后继续执行会报的错误)。可以定义continue的事件,指定这个事件发生时修改变量done的值,以此来判断游标是否已经溢出。
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
同时在循环中加上对done的判断,如果游标的循环已经结束,就需要跳出read_loop循环。
CREATE PROCEDURE `calc_hp_max`()BEGIN -- 创建接收游标的变量 DECLARE hp INT; -- 创建总数变量 DECLARE hp_sum INT DEFAULT 0; -- 创建结束标志变量 DECLARE done INT DEFAULT false; -- 定义游标 DECLARE cur_hero CURSOR FOR SELECT hp_max FROM heros; -- 指定游标循环结束时的返回值 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; OPEN cur_hero; read_loop:LOOP FETCH cur_hero INTO hp; -- 判断游标的循环是否结束 IF done THEN LEAVE read_loop; END IF; SET hp_sum = hp_sum + hp; END LOOP; CLOSE cur_hero; SELECT hp_sum;END
运行结果
除了LOOP循环以外,还可以使用REPEAT...UNTIL...以及WHILE循环。
总结
sql 游标_SQL基础丨游标相关推荐
- mysql基础sql语句_SQL基础语句汇总
引言 是时候复习一波SQL语句的语法了,无需太深,但总得会用啊. 语法 一步步由浅到深,这里用的都是mysql做的. 基础 连接数据库 mysql -h10.20.66.32 -uroot -p123 ...
- mysql 事务回滚_SQL基础丨事务处理
事务的特性:ACID MySQL5.5版本之前,默认的存储引擎是MyISAM,在5.5版本之后默认存储引擎是InnoDB.两者唯一的区别就是InnoDB支持事务. 事务的英文是transaction, ...
- mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数
一.变量 1.系统变量:全局变量.会话变量 说明:由系统提供,属于服务器层面.如果是全局级别,则需要加 global,如果是会话级别,则需加 session,如果不写,则默认 session.全局变量 ...
- SQL Server之游标的基础知识
什么是游标: 游标是可以在结果集中上下游动的指针. 游标的作用: --允许定位到结果集中的特定行. --从结果集的当前位置检索一行或多行数据. --支持对结果集中当前位置的行进行修改. 注意:游标虽然 ...
- MS SQL入门基础:打开游标
打开游标游标在声明以后,如果要从游标中读取数据必须打开游标.打开一个Transact-SQL服务器游标使用OPEN 命令,其语法规则为: OPEN { { [GLOBAL] cursor_name } ...
- SQL server 游标(只进游标)讲解
游标概念: SQL的游标是一种临时的数据库对象,既可以存放储存在数据库表中数据行的副本,也可以指向储存在数据库中的数据行的指针,游标提供了在逐行的基础上操作表中数据的方法. 游标的作用: 1.定位到结 ...
- oracle游标的基础应用,Oracle 基础的游标的使用
基础的游标的使用 -- Created on2017-01-03 星期二 by ADMINISTRATOR declare --申明游标 cursor mycursor is select * fro ...
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- PL/SQL程序设计 第四章 游标的使用
在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现. §4.1 游标概念 为了处理 SQL 语句,ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的 ...
最新文章
- 大话设计模式笔记(七)の原型模式
- 成为机器学习工程师第一年,我学到的 12 件事
- 4个重要的量子理论实验综述
- python对字幕的改动
- Python统计在一个队列中有多少个正数,多少个负数
- 在一个字符串中找到第一个只出现一次的字符
- python简易发红包_学习python:练习5.简单红包程序
- 2MyBatis入门--深入浅出MyBatis技术原理与实践(笔记)
- Metro风格的Android界面应用
- dategurd oracle_Oracle之11g DataGuard
- 局部临时表 全局临时表 表变量
- (三)mybatisPlus自定义Sql语句
- 最常用的计算机色彩表示方法——RGB模式与CMYK模式
- 前端应届简历应该怎么写?
- Android插件化开发指南——实践之ViewPager+Fragment优化(预加载和懒加载)
- 锁定计算机过久电脑自动关机,如何设置电脑在某个或一段时间后自动关机
- jQuery实现消息提示框
- 如何禁止搜索引擎收录WordPress站点某个分类的文章?
- VS Code, VS 2022 使用正则表达式进行替换
- MySQL的下载与安装教程--超详细
热门文章
- 生存分析-从survdiff函数中提取P值
- The Third Revolution in Sequencing Technology
- 第三代测序为什么这么贵?
- c语言中的常用函数的使用,C语言的常用库函数使用方法分析及用途
- mysql为什么直接8.0_为什么要迁移到MySQL8.0?
- flask 作为 three.js 的服务器
- 【openfst样例1】Tokenization
- 在Python中使用LLVM接口:llvmpy和llvmlite
- html中js定义数组,javascript数组的定义及操作实例
- C++_reference