首页 > 数据库技术 > 详细

Mysql游标使用 批量插入或更新数据

时间:2015-05-08 13:10:38      阅读:217      评论:0      收藏:0      [点我收藏+]
-- LOOP循环
CREATE PROCEDURE `test`.`new_procedure` ()
BEGIN
-- 需要定义接收游标数据的变量 
  DECLARE a CHAR(16);
  -- 游标
  DECLARE cur CURSOR FOR SELECT i FROM test.t;
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT FALSE;
  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  -- 打开游标
  OPEN cur;
  
  -- 开始循环
  read_loop: LOOP
    -- 提取游标里的数据,这里只有一个,多个的话也一样;
    FETCH cur INTO a;
    -- 声明结束的时候
    IF done THEN
      LEAVE read_loop;
    END IF;
    -- 这里做你想做的循环的事件

    INSERT INTO test.t VALUES (a);

  END LOOP;
  -- 关闭游标
  CLOSE cur;

END;

注:变量的定义不要和你的select的列的键同名!不然,fetch into 会失败!

另外 :

如果没有则插入数据,如果有则更新的方法:

insert into `test` values (a,b) ON DUPLICATE KEY UPDATE `a`=c;



-- while循环
create procedure curdemo()
begin
       declare stop_flag int DEFAULT 0;//声明一个标记,当游标状态为最后一条记录时,修改该变量
	declare id int default 0;
	declare type int default 0;
	declare order1 int default 0;
	declare cur1 cursor for select * from test1;
       declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET stop_flag=1;  
       open cur1;//打开游标

       fetch cur1 into id,type,order1;读取数据到游标
       while stop_flag<>1 DO//若游标有下一条记录,循环
	    insert into test2 values(id,type,order1);
           fetch cur1 into id,type,order1;
       end while;
       close cur1;//关闭游标
end;



Mysql游标使用 批量插入或更新数据

原文:http://my.oschina.net/yongyi/blog/412213

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!