首页 » SEO优化 » phpmysqlcursor技巧_MySQL存储过程中运用游标遍历结果集

phpmysqlcursor技巧_MySQL存储过程中运用游标遍历结果集

访客 2024-11-25 0

扫一扫用手机浏览

文章目录 [+]

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

下面将会先容sql的语句和游标的用法:

phpmysqlcursor技巧_MySQL存储过程中运用游标遍历结果集

INSERT,UPDATE,DROP, DELETE 是插入,修正,删除表,删除记录用的,因此没有返回结果。

phpmysqlcursor技巧_MySQL存储过程中运用游标遍历结果集
(图片来自网络侵删)

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();

标签:

相关文章