查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中的记录。有些书上将光标称为游标。光标的使用包括声明光标、打开光标、使用光标和关闭光标。光标必须声明在处理程序之前,并且声明在变量和条件之后。
声明光标
在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中,使用关键字CLOSE来关闭光标,其基本语法如下:
CLOSE cursor_name;
其中,参数cursor_name表示光标的名称。
例如: 关闭一个名为cur_stu的光标,代码如下:
CLOSE cur_stu;