首页 理论教育 MySQL数据库游标(cursor)应用实例

MySQL数据库游标(cursor)应用实例

时间:2023-11-22 理论教育 版权反馈
【摘要】:图9.2 创建游标的过程call usecursor();调用结果如图9.3所示。图9.3 游标执行结果用循环结构结合游标逐行显示记录的代码如下:create procedure usecursor1()begindeclare aname varchar;declare acj int;declare stop int default 0;declare cur_st cursor for;declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;open cur_st;fetch cur_st into aname,acj;WHILE DOselect aname,acj;fetch cur_st into aname,acj;end while;close cur_st;end执行结果如图9.4所示。

MySQL数据库游标(cursor)应用实例

标的使用可以概括为声明游标、打开游标、从游标中提取数据以及关闭游标,游标使用过程如图9.1所示。

图9.1 游标使用过程

1.声明游标

声明游标需要使用DECLARE语句,其语法格式如下:

DECLARE 游标名 CURSOR FOR SELECT语句

使用declare语句声明游标后,此时与该游标对应的select语句并没有执行,MySQL服务器内存中并不存在与select语句对应的结果集。

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

2.打开游标

打开游标需要使用OPEN语句,其语法格式如下:

OPEN 游标名

使用OPEN语句打开游标后,与该游标对应的select语句将被执行,MySQL服务器内存中将存放与select语句对应的结果集。这个语句打开先前声明的游标。

3.从游标中提取数据

从游标中提取数据需要使用FETCH语句,其语法格式如下:

FETCH cursor_name INTO var_name [,var_name] ...

这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针

4.关闭游标

关闭游标需要使用CLOSE语句,其语法格式如下:

CLOSE cursor_name

这个语句关闭先前打开的游标。游标如果没有被明确地关闭,游标将在它被声明的begin-end语句块的末尾关闭。

【例9.1】创建一个游标操作过程,用游标读取表中数据。

create procedure usecursor()

begin

declare aname varchar(20);

declare acj int;

declare cur_st cursor for(select sname,grade from student);

open cur_st;

fetch cur_st into aname,acj;

select aname,acj;

fetch cur_st into aname,acj;

select aname,acj;

fetch cur_st into aname,acj;

select aname,acj;

close cur_st;

end

执行结果如图9.2所示。

(www.xing528.com)

图9.2 创建游标的过程

call usecursor();

调用结果如图9.3所示。

图9.3 游标执行结果

用循环结构结合游标逐行显示记录的代码如下:

create procedure usecursor1()

begin

declare aname varchar(20);

declare acj int;

declare stop int default 0;

declare cur_st cursor for(select stname,cj from student);

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;

open cur_st;

fetch cur_st into aname,acj;

WHILE ( stop is not null) DO

select aname,acj;

fetch cur_st into aname,acj;

end while;

close cur_st;

end

执行结果如图9.4所示。

图9.4 创建带循环结构游标的过程

call usecursor1();

调用结果如图9.5所示。

图9.5 循环结构游标执行结果

分析语句:declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=null;

/* mysql不知道用什么异常加入判断?这把游标异常捕捉后,并设置循环使用变量stop为null跳出循环*/

02000 主要代表的意思可以理解为:

发生下述异常之一:

(1)SELECT INTO语句或INSERT语句的子查询的结果为空表。

(2)在搜索UPDATE或DELETE语句内标识的行数为零。

(3)在FETCH 语句中引用的游标位置处于结果表最后一行之后。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈