一、前言
寒假接触到了数据库游标的概念,一直没有实现。昨日回头看了一下,今早给实现了。
二、数据库游标的优势
自己百度、谷歌去吧。
三、MySQL语法实现
3.1游标的使用详情
a.声明游标
DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。
b.游标OPEN语句
OPEN cursor_name
这个语句打开先前声明的游标。
c.游标FETCH语句
FETCH cursor_name INTO var_name [, var_name] …
这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。
d.游标CLOSE语句
CLOSE cursor_name
这个语句关闭先前打开的游标。
3.2代码实现
1.创建测试数据库、数据表
CREATE TABLE `users` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(60) NOT NULL DEFAULT '',
`user_pass` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
2.创建游标
将该内容存于一个.sql文件中,比如我将该内容存到了myCursorTest.sql文件中。
use test; /*选择使用已经创建好的数据库test*/
delimiter | /*使用delimiter告诉数据库该处需要多条SQL命令解析*/
create procedure test_cursor (in param int(10),out result varchar(90)) /*创建存储过程*/
begin /*开始*/
declare name varchar(20); /*声明变量*/
declare pass varchar(20);
declare done int;
declare cur_test CURSOR for select user_name,user_pass from users; /*声明游标*/
declare continue handler FOR SQLSTATE '02000' SET done = 1;
if param then /*开始循环调用*/
select concat_ws(',',user_name,user_pass) into result from test.users where id=param;
else
open cur_test;
repeat
fetch cur_test into name, pass;
select concat_ws(',',result,name,pass) into result;
until done end repeat;
close cur_test;
end if; /*结束循环*/
end;
|/*终结*/
3.调用游标
a.在该myCursorTest.sql文件所在的目录下使用命令使文件生效;
mysql -u root -p < myCursorTest.sql
b.调用游标;
call test_cursor(10,@test);/注意参数/
c.显示游标取到的结果集。
select @test;
4.删除游标
使用命令删除游标:
drop procedure test_cursor;
3.3截图参考
1.创建测试游标
2.调用游标及结果
四、参考材料
http://blog.51yip.com/mysql/1281.html
http://blog.youkuaiyun.com/u011704894/article/details/51223010