mysql存储过程游标循环

发布时间: 2023-11-21 12:36 阅读: 文章来源:1MUMB3959PS

当查询的结果需要一条一条的进行处理的时候,可以使用游标来遍历结果集中的每一条数据。

游标可以循环处理查询结果集数据。

下面将会介绍sql的语句和游标的用法:

insert,update,drop, delete 是插入,修改,删除表,删除记录用的,因此没有返回结果。

select返回单行变量。

select语句返回的记录可以传给本地变量(select .. into)。

select语句返回多行结果集时,可使用MySQL的游标来对结果集的每一条记录进行循环处理。

存储过程返回的多行结果集是可以被客户端程序(如javaweb,php等)接收,

但不能在一个存储过程中接收另一个存储过程的结果集,

一般解决办法是将存储过程返回的多行结果集存入一张临时表中,以供其它的过程使用。

定义游标

declare cursor_name CURSOR FOR SELECT_statement;

cursor_name是游标的名称。

SELECT_statement 是查询语句,该语句返回查询的结果集。

定义的游标cursor_name代表返回的结果集。

打开游标就可以对游标定义的结果集进行循环处理。

OPEN 打开游标

OPEN cursor_name;

FETCH 获取游标当前指针的一行记录,将这一行记录传给指定变量列表接收。

注意:变量数必须与MySQL游标返回的字段数一致。

要获得多行数据,使用循环语句去执行FETCH。

即,使用循环语句去循环取游标中的每一条记录,然后将记录中所有字段值传给对应的变量。

这样使用游标就能对结果集做循环处理。

循环语句:

REPEAT

FETCH cursor_name INTO variable list;

UNTIL DONE END REPEAT;

FETCH语句:

FETCH可以取一条记录中的所有字段数据,并配合INTO 将字段值传给变量。

FETCH cursor_name INTO variable list;

CLOSE关闭游标

CLOSE cursor_name ;

MySQL的游标是向前只读的

也就是只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录。

游标可以复用。

关闭游标再打开游标会回到结果集第一条记录。

创建存储过程,并使用游标。

循环取游标返回的记录所有字段的值传给变量。

CREATE PROCEDURE testEndHandle1()

BEGIN

declare done BOOLEAN DEFAULT 0;

declare tmp_uid INT DEFAULT 0;

declare tmp_uage INT DEFAULT 0;

declare tmp_uname VARCHAR(255);

declare t_index CURSOR FOR select t_user.user_id, t_user.user_age, t_user.user_name FROM t_user;

-- 写法一:declare CONTINUE HANDLER FOR NOT FOUND SET done=1;

-- declare CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- 写法二:declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;

declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;

OPEN t_index;

REPEAT

FETCH t_index INTO tmp_uid,tmp_uage,tmp_uname;

IF done!=1 THEN

select tmp_uid,tmp_uage,tmp_uname;

END IF;

UNTIL DONE END REPEAT;

CLOSE t_index;

END;

--drop PROCEDURE IF EXISTS testEndHandle1;

call testEndHandle1();

•••展开全文