查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中的记录。有些书上将光标称为游标。光标的使用包括声明光标、打开光标、使用光标和关闭光标。光标必须声明在处理程序之前,并且声明在变量和条件之后。

声明光标

在MySQL中,可以使用DECLARE关键字来声明光标,其基本语法如下:

DECLARE cursor_name CURSOR

FOR select_statement;

其中,参数cursor_name表示光标的名称;参数select_statement表示SELECT语句的内容。

例如: DECLARE cur_stu CURSOR FOR select name,id from student; 在这个示例中,光标的名称为cur_stu,SELECT语句部分是从表student中查询出字段name和id的值。

打开光标

在MySQL中,使用关键字OPEN来打开光标,其基本语法如下:

OPEN cursor_name;

其中,参数cursor_name表示光标的名称。

下面代码打开一个名为cur_stu的光标,代码如下:

OPEN cur_stu;

使用光标

在MySQL中,使用关键字FETCH来使用光标,其基本语法如下:

FETCH cursor_name

INTO var_name[,var_name…];

其中,参数cursor_name表示光标的名称;参数var_name表示将光标中的SELECT语句查询出来的信息存入该参数中。var_name必须在声明光标之前就定义好。

例如:我们可以用光标来查询我们要查询的信息。

代码示例:

mysql> create table student(id int,name varchar(64));    #创建班级表
mysql> insert into student values(1,'Mr.Wang'),(2,'Mr.Li'),(3,'Mr.Shi'),(4,'Mr.Zhang');    #插入多条数据
mysql> select*from student;    #显示表中的数据
mysql> delimiter $    #改变结束符为'$'
mysql> create procedure query_stu(in sid int,out cname varchar(64),out cid int)
    -> begin
    -> declare temp_name varchar(64);    #定义变量用来保存表中name字段
    -> declare temp_id int;    #定义变量用来保存表中id字段
    -> declare cur_stu cursor for select name,id from student where id=sid;    #定义光标保存字段name和id
    -> open cur_stu;    #打开光标
    -> fetch cur_stu into temp_name,temp_id;    #使用关键
    -> close cur_stu;    #关闭光标
    -> set cname=temp_name,cid=temp_id;    #赋值
    -> end;
    -> $
mysql> delimiter ;    #改变结束符为';'
mysql> call query_stu(3,@name1,@id1);    调用存储过程
mysql> select @name1,@id1;    #打印参数

mysql 存储过程 遍历游标 mysql存储过程cursor_MySQL

 这里创建了学生表并插入多条数据。

mysql 存储过程 遍历游标 mysql存储过程cursor_mysql 存储过程 遍历游标_02

mysql 存储过程 遍历游标 mysql存储过程cursor_字段_03

 这里在创建存储过程里用到了声明光标,打开光标,并使用光标的一些操作,最后再调用存储过程。

关闭光标

在MySQL中,使用关键字CLOSE来关闭光标,其基本语法如下:

CLOSE cursor_name;

其中,参数cursor_name表示光标的名称。

例如: 关闭一个名为cur_stu的光标,代码如下:

CLOSE cur_stu;