Angel_1987 2015-02-04 01:33 采纳率: 0%
浏览 4592

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币了。各位慷慨一下

  • 写回答

1条回答 默认 最新

  • chaimyu 2015-02-05 13:38
    关注

    是不是达到你的条件了?
    不行加个变量看一下是执行了多少次,或者传些数据到存储过程外面去调试吧

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)