Mysql 游标cursor

2015-12-31 • DatabaseNo Comments

最近要写一些存储过程帮助处理特殊数据,发现mysql没有for in遍历结果集这种语法,不过可以使用游标达到相同的效果,使用方法稍微要麻烦一些,下面是游标的基本用法。

游标Cursor的四个基本操作:

  • 定义:DECLARE cursor_name CURSOR FOR select
  • 打开:OPEN cursor_name
  • 读取:FETCH cursor_name INTO column
  • 关闭:CLOSE cursor_name

下面是一个查询并创建新数据的实例

BEGIN
    DECLARE last_flag INT DEFAULT 0;
    DECLARE user_name_tmp VARCHAR(60);
    DECLARE role_id_tmp INT;
    DECLARE user_cursor CURSOR FOR SELECT role_id, user_name FROM vz_user WHERE main_user_id != 0;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET last_flag = 1;
    OPEN user_cursor;
    FETCH user_cursor INTO role_id_tmp, user_name_tmp;

    WHILE last_flag != 1 DO
        INSERT INTO vz_user (role_id, user_name, user_password) VALUES (role_id_tmp, CONCAT(user_name_tmp,'2'), MD5('123456'));
        FETCH user_cursor INTO role_id_tmp, user_name_tmp;
    END WHILE;
    CLOSE user_cursor;
END

粤公网安备 44011102000950号