mysql 游标的使用

转载自:http://www.blogjava.net/Good-Game/archive/2008/04/27/196486.html

请使用 mysql 1.5 或以上version;
测试表 level ;
create table test.level (name varchar(20));
再 insert 些数据 ;

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> /* 初始化 */
drop procedure if exists useCursor //

/* 建立存储过程create */
CREATE PROCEDURE useCursor()
BEGIN
/* 局部变量的定义declare */
declare tmpName varchar ( 20 ) default '' ;
declare allName varchar ( 255 ) default '' ;

declare cur1 CURSOR FOR SELECT name FROM test. level ;

/* mysql不知道为什么用异常加入判断?
*此请参考官方文档
20.2.11. 光标 光标
*这把游标异常后捕捉
*并设置循环使用变量tmpname为null跳出循环。
*/
declare CONTINUE HANDLER FOR SQLSTATE ' 02000 ' SET tmpname = null ;


/* 开游标 */
OPEN cur1;
/* 游标向下走一步 */
FETCH cur1 INTO tmpName;

/* 循环体这很明显把游标查询出的name都加起并用;号隔开 */
WHILE (tmpname is not null )DO
set tmpName = CONCAT(tmpName,";");
set allName = CONCAT(allName,tmpName);
/* 游标向下走一步 */
FETCH cur1 INTO tmpName;
END WHILE ;

CLOSE cur1;

select allName;
END ; //
calluseCursor()
//


运行结果:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> mysql > calluseCursor() //
+ -- ------------------------------------+
| allName |
+ -- ------------------------------------+
| f1;c3;c6;c5;c2;c4;c1;f1;f3;f4;f2;f5; |
+ -- ------------------------------------+
1 row in set ( 0.00 sec)

你可能感兴趣的:(html,mysql,.net)