zoukankan      html  css  js  c++  java
  • 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

      此时的结果如下:

  • 相关阅读:
    【车】汽车X40保养
    【Teradata SQL】使用SQL将多个逗号分隔改为一个逗号分隔
    【Teradata】并行操作工具
    【Linux常见问题】SecureCRT 终端连接密钥交换失败错误
    【Linux基础】Linux更改系统IP
    【Teradata】块压缩(ferret工具)
    【Teradata】grouping和rollup窗口函数
    HttpClient之EntityUtils工具类
    MYSQL索引优化之单表示例
    MySQL执行计划示例
  • 原文地址:https://www.cnblogs.com/bien94/p/12801618.html
Copyright © 2011-2022 走看看