最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql存储过程循环只执行一次

来源:动视网 责编:小采 时间:2020-11-09 16:35:50
文档

mysql存储过程循环只执行一次

mysql存储过程循环只执行一次:mysql存储过程 下面是存储过程主体,问题是无论怎么跑,貌似里面的两个循环都只会执行一次。好困惑。请sql大神解救BEGINDECLARE stop_flag INT DEFAULT 0;DECLARE captain VARCHAR(500);DECLARE captain1 VARCHAR(500)
推荐度:
导读mysql存储过程循环只执行一次:mysql存储过程 下面是存储过程主体,问题是无论怎么跑,貌似里面的两个循环都只会执行一次。好困惑。请sql大神解救BEGINDECLARE stop_flag INT DEFAULT 0;DECLARE captain VARCHAR(500);DECLARE captain1 VARCHAR(500)


mysql存储过程

下面是存储过程主体,问题是无论怎么跑,貌似里面的两个循环都只会执行一次。好困惑。请sql大神解救

BEGIN
DECLARE stop_flag INT DEFAULT 0;
DECLARE captain VARCHAR(500);
DECLARE captain1 VARCHAR(500);
DECLARE captain2 VARCHAR(500);
declare captainstaffno1 varchar(32);
declare captainstaffno2 varchar(32);
declare crwPilotInf varchar(500);
DECLARE leftSeat VARCHAR(200);
DECLARE rightSeat VARCHAR(200);
DECLARE controller VARCHAR(200);
DECLARE ti_code varchar(32);
declare flightNo VARCHAR(32);
DECLARE flightDate datetime;
declare to_airport varchar(32);
declare ld_airport varchar(32);
declare observers varchar(500) DEFAULT '';
declare observerIds varchar(500) default '';
declare observerText varchar(500);
declare observerNames varchar(100);
declare observerId varchar(100);
DECLARE leftSeat_SID VARCHAR(200);
DECLARE rightSeat_SID VARCHAR(200);
DECLARE controller_SID VARCHAR(200);
#定义游标
DECLARE cur1 CURSOR FOR select tiCode, FLIGHT_NO, datop, tiAirDromeBegin,
tiAirDromeEnd, tiLeftSeat, tiRightSeat, tiControl
from ODS.T_FLIGHT_SEGMENTS_REPORT WHERE datop between '2014-02-01' and '2014-02-28';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET stop_flag=1;
?
open cur1;
WHILE stop_flag = 0 DO
FETCH cur1 INTO ti_code,flightNo,flightDate,to_airport,
ld_airport,leftSeat,rightSeat,controller;
SET @sqlexec:=concat('select CRWPILOTINF,CAPTAIN1,CAPTAINSTAFFNO1,CAPTAIN2,CAPTAINSTAFFNO2 into @crwPilotInf, @captain1, @captainstaffno1, @captain2, @captainstaffno2 from ODS.T_FLIGHT_REPORT_SPL where FLTIDS=\'',flightNo,'\' and DATE_FORMAT(FLTDATE,\'%Y-%m-%d\')=\'',flightDate,'\' and TO_AIRPORT=\'',to_airport,'\' and LD_AIRPORT=\'',ld_airport,'\';');
prepare stmt from @sqlexec ;
execute stmt;
deallocate prepare stmt ;
set crwPilotInf = @crwPilotInf;
set captain1 = @captain1;
set captainstaffno1 = @captainstaffno1;
set captain2 = @captain2;
set captainstaffno2 = @captainstaffno2;
SET @i = 1;
SET @count=CHAR_LENGTH(crwPilotInf)-CHAR_LENGTH(REPLACE(crwPilotInf,';','')) + 1;
IF IFNULL(@count,0) > 0 THEN
WHILE @i <= @count DO
set observerText = SUBSTRING_INDEX(SUBSTRING_INDEX(crwPilotInf,';',@i),';',-1);
set observerNames = SUBSTRING_INDEX(SUBSTRING_INDEX(observerText,':',1),':',-1);
set observerId = SUBSTRING_INDEX(SUBSTRING_INDEX(observerText,'+',2),'+',-1);
select @i,observerText,observerNames,observerId;
if (observerText REGEXP captain1) > 0 then
select (observerText REGEXP captain1);
ELSEIF (observerText REGEXP captain2) > 0 then
select (observerText REGEXP captain2);
ELSEIF (observerText REGEXP leftSeat) > 0 then
update ODS.T_FLIGHT_SEGMENTS_REPORT a
INNER JOIN STG.IF_TASKINFOAIRCREWS_TMP b
on a.tiCode=b.TICODE set a.LEFTSEAT_PILOT_ID=b.SID
where b.TICODE=ti_code
and b.MNAME=leftSeat;
ELSEIF (observerText REGEXP rightSeat) > 0 then
update ODS.T_FLIGHT_SEGMENTS_REPORT a
INNER JOIN STG.IF_TASKINFOAIRCREWS_TMP b
on a.tiCode=b.TICODE set a.RIGHTSEAT_PILOT_ID=b.SID
where b.TICODE=ti_code
and b.MNAME=rightSeat;
ELSEIF (observerText REGEXP controller) > 0 then
update ODS.T_FLIGHT_SEGMENTS_REPORT a
INNER JOIN STG.IF_TASKINFOAIRCREWS_TMP b
on a.tiCode=b.TICODE set a.CONTROL_PILOT_ID=b.SID
where b.TICODE=ti_code
and b.MNAME=controller;
ELSE
SET observers = concat(observers, observerNames,',');
SET observerIds = concat(observerIds, observerId,',');
END IF;
SET @i=@i+1;
END WHILE;
END IF;
UPDATE ODS.T_FLIGHT_SEGMENTS_REPORT SET OBSERVER_PILOT_ID=observerIds, OBSERVER_NAME=observers
where FLIGHT_NO=flightNo and datop=flightDate and tiAirDromeBegin=to_airport and tiAirDromeEnd = ld_airport;
SET observers='';
SET observerIds='';
COMMIT;
END WHILE;
CLOSE cur1;
END

麻烦大神们都帮忙看看,问题出在哪里。怎么解决?
ps:没有c币了。各位慷慨一下

文档

mysql存储过程循环只执行一次

mysql存储过程循环只执行一次:mysql存储过程 下面是存储过程主体,问题是无论怎么跑,貌似里面的两个循环都只会执行一次。好困惑。请sql大神解救BEGINDECLARE stop_flag INT DEFAULT 0;DECLARE captain VARCHAR(500);DECLARE captain1 VARCHAR(500)
推荐度:
标签: 一次 循环 mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top