十九、游标 Cursor

简介: 十九、游标 Cursor

游标 Cursor

MySQL检索操作返回一组称为结果集的行 ,这组返回的行都是与SQL语句相匹配的行(零行或多行)。使用简单的SELECT语
句,例如,没有办法得到第一行、下一行或前10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)。
有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改

使用游标

使用游标涉及几个明确的步骤。

  1. 在能够使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句。
  2. 一旦声明后,必须打开游标 open 以供使用。这个过程用前面定义的SELECT语句把数据实际检索出来。
  3. 对于填有数据的游标,根据需要取出(检索)各行。
  4. 在结束游标使用时,必须关闭游标  close

隐含关闭 如果你不明确关闭游标, MySQL将会在到达END语
句时自动关闭它。

游标只能用于存储过程 不像多数DBMS, MySQL游标只能用于存储过程(和函数)。

打开 游标

open cursor;

关闭游标

close cursor;

获得游标中的数据

fetch names_cursor into v_name;

示例:

-- 1. 查询出20部门所有员工的姓名

create PROCEDURE emp_names_pro()
begin
  declare v_name varchar(100);
  declare v_count int;
  declare v_i int default  0;
  declare names_cursor cursor
  for
  select ename from emp where deptno=20;  
  select count(empno) from emp where deptno=20 into v_count;
  open names_cursor;    
    while v_i <= v_count do 
      fetch names_cursor into v_name;
      insert into empNames values(v_name);  
      set v_i = v_i +1;
    end while;    
  close names_cursor; 
end;
-- 调用存储过程
call emp_names_pro;
drop PROCEDURE emp_names_pro;
-- 把查询20部门到的员工的姓名 放在一张新表中
create table empNames(emp_name varchar(100));
目录
相关文章
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
234 0
|
存储 SQL 数据可视化
MySQL_01--游标CURSOR--通过游标(CURSOR)实现对select选择集的迭代使用,解决在Navicat中声明游标就一直报错的问题
我的需求是,一条一条的读取并使用select选择集的结果,使用的数据库可视化软件是Navicat。 但是我在使用游标的过程中一直在游标声明处就报错,试了很多方法,改名字,调整变量顺序都不管用,最后发现,游标需要定义在存储过程(Stored Procedure)函数里。
|
SQL 数据处理 数据库管理
游标的简单例子
游标 不单独存在 是看不到的 declare mycursor 声明游标 cursor for select UserName,Gender fro...
1118 0
|
SQL 关系型数据库 数据库
|
SQL 算法 Go
|
SQL Oracle 关系型数据库
|
JavaScript IDE 开发工具