mysql存储过程 --游标的使用 取每行记录 (多字段)


delimiter $

create  PROCEDURE  phoneDeal()
BEGIN
     DECLARE   id  varchar (64);    -- id
     DECLARE   phone1   varchar (16);  -- phone
     DECLARE   password1   varchar (32);  -- 密码
     DECLARE   name1  varchar (64);    -- id
     -- 遍历数据结束标志
     DECLARE  done  INT  DEFAULT  FALSE ;
     -- 游标
     DECLARE  cur_account  CURSOR  FOR  select  phone, password , name  from  account_temp;
     -- 将结束标志绑定到游标
     DECLARE  CONTINUE  HANDLER  FOR  NOT  FOUND  SET  done =  TRUE ;
    
     -- 打开游标
     OPEN   cur_account;     
     -- 遍历
     read_loop: LOOP
             -- 取值 取多个字段
             FETCH   NEXT  from  cur_account  INTO  phone1,password1,name1;
             IF done  THEN
                 LEAVE read_loop;
              END  IF;
 
         -- 你自己想做的操作
         insert  into  account(id,phone, password , name ) value(UUID(),phone1,password1,CONCAT(name1, '的家长' ));
     END  LOOP;
 
 
     CLOSE  cur_account;
END  $
 
 
 
===================实例============================

BEGIN
#Routine body goes here...
DECLARE i INT DEFAULT 0;
DECLARE j INT DEFAULT 33;
DECLARE v_sourceid INT DEFAULT 0;

DECLARE schoolid bigint(20);
DECLARE schoolName VARCHAR(50);
-- endflag
DECLARE done INT DEFAULT FALSE;
-- declare cusor
DECLARE cur_schoolidt CURSOR FOR SELECT ID,SCHOOL_NAME from T_SCHOOL_DEFINED WHERE SCHOOL_NAME like '武汉%' and DELETED='N' LIMIT 170;
-- banding endflag to cusor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
-- open cusor
OPEN cur_schoolidt;

-- 遍历
read_loop:LOOP
-- 取值
FETCH NEXT FROM cur_schoolidt INTO schoolid,schoolName;

IF done THEN
LEAVE read_loop;
END IF;

START TRANSACTION;
WHILE i<1000 DO
INSERT INTO T_MEMBER (LOGIN_NAME,NIKE_NAME,ORIGINAL_ID,MEMBER_SOURCE,SCHOOL_NAME,SEX,enrollment_year,GRADE,FIRST_NAME,UPDATOR,CREATE_DATE,UPDATE_DATE,STATUS,DELETED,SCHOOLID,MEM_CLASS,MEM_TYPE,IS_FEE,IS_CARD,joinclass_date,flag) VALUES
(CONCAT(CONCAT(j),"alad",i),CONCAT(CONCAT(j),"alad",i),1,0,schoolName,'M','2015','9',CONCAT(CONCAT(j),"alad",i),0,'2018-01-18 16:26:55','2018-01-18 16:26:55',99,'N',schoolid,1,1,0,0,'2018-01-18 16:26:55',0);

SELECT max(ID) INTO v_sourceid from T_MEMBER;
INSERT INTO T_MEMBER_IDENTITY (SOURCE_ID,SOURCE_SYSTEM,LOGIN_NAME,MOBILE_NO,PASSWORD,PASSWORD_STATE,LAST_LOGIN_TIME,CREATE_DATE,DELETED,MEM_TYPE) VALUES
(v_sourceid,1,CONCAT(CONCAT(j),"alad",i),'00000000000','96e79218965eb72c92a549dd5a330112',1,'2017-08-10 18:10:18','2017-08-07 17:06:53','N',1);
SET i=i+1;

END WHILE;
COMMIT;
SET i=0;
SET j=j+1;

END LOOP;

CLOSE cur_schoolidt;


END


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM