13-光标的使用
9.4.5 光标的使用
在存储过程或自定义函数中的查询可能返回多条记录,可以使用光标来逐条读取查询结果集中的记录。光标在很多其他的书籍中被称为游标。光标的使用包括光标的声明、打开光标、使用光标和关闭光标。需要注意的是,光标必须在处理程序之前声明,在变量和条件之后声明。
1.声明光标
MySQL中使用DECLARE来声明光标,语法如下。
DECLARE cursor_name CURSOR FOR select_statement
其中,cursor_name为光标的名称;select_statement为查询语句,返回一个结果集,声明的光标基于该结果集进行操作。可以在子程序中定义多个光标,但是一个块中的每一个光标必须有唯一的名称。
【范例9-22】
声明一个cursor_emp的光标,代码如下。
declare cursor_emp cursor for select empno,empname from emp
其中,cursor_emp为光标名称,SELECT语句从emp表中查询empno和empname两列的数据。
2.打开光标
OPEN cursor_name
其中,cursor_name为先前声明的光标。
【范例9-23】
打开cursor_emp的光标,代码如下。
Open cursor_emp;
该示例打开先前声明的cursor_emp光标。
3.使用光标
MySQL中使用FETCH语句来操作和使用光标,语法如下。
FETCH cursor_name INTO var_name [, var_name] ...
其中,cursor_name为先前声明并打开的光标名称;var_name参数表示将光标声明中的SELECT语句中的查询信息存储在该参数中;var_name必须在光标声明前定义好。
【范例9-24】
使用名称为cursor_emp的光标,将查询得到的数据存储在变量e_no、e_name中,代码如下。
Fetch cursor_emp into e_no,e_name;
该示例使用cursor_emp,将SELECT语句中查询得到的empno、empname存储在变量e_no、e_name中。
4.关闭光标
CLOSE cursor_name
MySQL中使用CLOSE关键字来关闭光标,cursor_name为声明并打开的光标。如果未被明确地关闭,光标在它被声明的复合语句的末尾被关闭。
【范例9-25】
关闭cursor_emp光标,代码如下。
Close cursor_emp;
提示 MySQL中的光标只能在存储过程和自定义函数中使用。