游标执行流程
游标执行的完整流程包括声明游标(DECLARE)、打开游标(OPEN)、获取下一行(FETCH)和关闭游标(CLOSE)。
声明游标(DECLARE)
声明一个游标的语法如下:
DECLARE cursor_name CURSOR FOR select_statement
此语法将游标与一个 SELECT 语句相关联(SELECT 语句中不能包含 INTO 子句),SELECT 语句可以检索游标要遍历的行。如果要稍后提取行,请使用 FETCH 语句,此时要求 SELECT 语句检索到的列数必须与 FETCH 语句中指定的输出变量的数量相匹配。
游标声明必须出现在处理程序声明之前,变量和条件声明之后。一个存储程序可以包含多个游标声明,但在指定块中声明的游标必须具有唯一的名称。
在大多数情况下,通过使用带有 INFORMATION_SCHEMA 表的游标可以获得与 SHOW 语句等效的信息。
打开游标(OPEN)
打开已声明的游标语法如下:
OPEN cursor_name
获取下一行(FETCH)
获取与指定游标(必须打开)关联的 SELECT 语句的下一行,并前进游标指针的语法如下:
FETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...
如果存在行,则获取的列存储在所命名的变量 var_name 中。SELECT 语句检索到的列数必须与 FETCH 语句中指定的输出变量的数量相匹配。
如果没有更多行可用时会出现无数据情况,即则 SQLSTATE 值为"02000"。要检测此情况,可以为其设置异常处理程序(或为其设置 NOT FOUND 条件)。需要注意的是,SELECT 或其他 FETCH 语句也可能会引发相同的情况,从而引发处理程序的执行。如果有必要区分是哪个操作引起了这种情况,请将该操作置于其自身的 BEGIN END 块中,以便只与自己的处理程序相关联。