MySQL游标循环遍历输出时字段值都是null
有这样的一个存储过程,在使用游标循环输出时字段值都是null
CREATE PROCEDURE `bien_db`.`get_user_info`() begin declare id varchar(15); declare name varchar(30); declare sex varchar(6) default 'man'; declare done int default false; declare user_info_cursor cursor for select id, name, sex from userinfo; declare continue HANDLER for not found set done = true; open user_info_cursor; user_info_loop:loop fetch user_info_cursor into id, name, sex; if done then leave user_info_loop; end if; select id, name, sex; end loop user_info_loop; close user_info_cursor; END
当运行该存储过程{call bien_db.get_user_info()}后字段的值都是null,如下图所示:
这是因为在游标范围内变量名称不能和字段名称重复,并且Mysql是不区分大小写的,所以即使使用大写的变量名称,字段名称用小写,它们也会被认为是同一个字符串。所以为了避免这种现象的发生,在声明变量名称时最好与对应的字段名不要重复,随便加个前缀或者后缀之类以便区分。
修改后的存储过程代码如下所示:
CREATE PROCEDURE `bien_db`.`get_user_info`() begin declare tmp_id varchar(15); declare tmp_name varchar(30); declare tmp_sex varchar(6) default 'man'; declare done int default false; declare user_info_cursor cursor for select id, name, age from userinfo; declare continue HANDLER for not found set done = true; open user_info_cursor; user_info_loop:loop fetch user_info_cursor into tmp_id, tmp_name, tmp_sex; if done then leave user_info_loop; end if; select tmp_id, tmp_name, tmp_sex; end loop user_info_loop; close user_info_cursor; END
此时的结果如下:
阅读是一种修养,分享是一种美德。