MySQl 存储过程+游标

DROP PROCEDURE IF exists pro_Insertflightplan_stat; 
create procedure pro_Insertflightplan_stat(execdate varchar(10))
begin

    declare c varchar(10);
    declare s varchar(10);
    declare b int default 0;    /*是否达到记录的末尾控制变量*/
    DECLARE cur_1 CURSOR FOR SELECT distinct t.companyICAO,ScheduleDate from flightplanlibarary_arch t where ScheduleDate = execdate;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
    OPEN cur_1;    
    FETCH cur_1 INTO c, s; /*获取第一条记录*/
    SET b = 2;
    SELECT execdate;
    while b<>1 do
        SELECT @coumunber:=ttt.count as count,@checkat:=ttt.checkedstate as checkedstate  /*变量赋值*/
        FROM (
    (SELECT  COUNT(*) as count,checkedstate
        from flightplan_today where EXECDATE= execdate and CHECKEDSTATE in ('0','1','2','3') and companyICAO like c  GROUP BY checkedstate )  
        UNION  
        (SELECT COUNT(*) as count,'4' as checkedstate FROM flightplanlibarary_arch WHERE id NOT IN (SELECT n.id FROM flightplan_today m  INNER  JOIN flightplanlibarary n  ON m.flightid=n.flightid AND m.    depap =n.depap AND m.execdate=n.ScheduleDate  AND m.execdate= execdate) and scheduledate= execdate and companyICAO like c )) ttt;
    IF @checkat=0
    THEN  
      insert into flightplan_stat (unifynum,nounifynum,submitnum,nosubmitnum,unconfirm,execdate,userICAO) VALUES(@coumunber,0,0,0,0,s,c);
        ELSEIF @checkat = 1  
                THEN  
        insert into flightplan_stat (unifynum,nounifynum,submitnum,nosubmitnum,unconfirm,execdate,userICAO) VALUES(0,@coumunber,0,0,0,s,c);
        ELSEIF @checkat = 2
            THEN
        insert into flightplan_stat (unifynum,nounifynum,submitnum,nosubmitnum,unconfirm,execdate,userICAO) VALUES(0,0,@coumunber,0,0,s,c);
        ELSEIF @checkat = 4
            THEN
        insert into flightplan_stat (unifynum,nounifynum,submitnum,nosubmitnum,unconfirm,execdate,userICAO) VALUES(0,0,0,@coumunber,0,s,c);
        ELSEIF @checkat= 3
            THEN
        insert into flightplan_stat (unifynum,nounifynum,submitnum,nosubmitnum,unconfirm,execdate,userICAO) VALUES(0,0,0,0,@coumunber,s,c);
        ELSE  
                     insert into flightplan_stat (unifynum,nounifynum,submitnum,nosubmitnum,unconfirm,execdate,userICAO) VALUES(0,0,0,0,0,s,c);
        END IF;  
 
    FETCH cur_1 INTO c, s; /*取下一条记录*/
    end while;
    close cur_1;       
end;


#call pro_Insertflightplan_stat('20150331');

原文地址:https://www.cnblogs.com/zh1989/p/4381006.html