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

  此時的結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM