mysql的游标怎么使用

作者:袖梨 2022-11-14

使用游标(cursor)

1.声明游标

DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。

2. 游标OPEN语句

OPEN cursor_name
这个语句打开先前声明的游标。

3. 游标FETCH语句

FETCH cursor_name INTO var_name [, var_name] ...
这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。

4. 游标CLOSE语句

CLOSE cursor_name
这个语句关闭先前打开的游标。

例1

代码如下 复制代码

//建立表结构
create table person(name varchar(10));

insert into person values(¹a¹);
insert into person values(¹b¹);
insert into person values(¹c¹);
insert into person values(¹d¹);
insert into person values(¹e¹);

//初始化
drop procedure if exists cursorTest

//建立
CREATE PROCEDURE cursorTest()
BEGIN

//定义变量
declare name1 varchar(10) default ¹¹ ;
declare name2 varchar(100) default ¹¹ ;

declare mycursor CURSOR FOR select name from person;

declare CONTINUE HANDLER FOR SQLSTATE ¹02000¹ SET tmpname = null;

//打开游标
OPEN mycursor;

//遍历游标
FETCH mycursor INTO name1;

//把游标查询出的 name 都加起并用 ; 号隔开
WHILE( name1 is not null) DO
set name1 = CONCAT(name1, ";") ;
set name2 = CONCAT(name2, name1) ;
FETCH mycursor INTO name1;
END WHILE;
CLOSE mycursor;

select mycursor;
END;

//调用游标
call mycursor()


运行结果:

mysql> call mycursor()
+--------------------------------------+

| name2 |

+--------------------------------------+

| a;b;c;d;e; |

+--------------------------------------+

1 row in set (0.01 sec)

例2


一个完整的例子:

代码如下 复制代码

-- 定义本地变量

DECLARE o varchar(128);


-- 定义游标

DECLARE ordernumbers CURSOR

FOR

SELECT callee_name FROM account_tbl where acct_timeduration=10800;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;

SET no_more_departments=0;


-- 打开游标

OPEN ordernumbers;


-- 循环所有的行

REPEAT

-- Get order number

FETCH ordernumbers INTO o;

update account set allMoney=allMoney+72,lastMonthConsume=lastMonthConsume-72 where NumTg=@o;


-- 循环结束

UNTIL no_more_departments
END REPEAT;

-- 关闭游标

CLOSE ordernumbers;


游标(cursor)的特性


1,只读的,不能更新的。
2,不滚动的
3,不敏感的,不敏感意为服务器可以活不可以复制它的结果表

游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明

相关文章

精彩推荐