IF,THEN在MySQL中使用多个语句的语法

IF,THEN在MySQL中使用多个语句的语法,mysql,Mysql,我对SQL相当陌生,因此如果我的代码和/或解释不清楚,我深表歉意,但如果有不清楚的地方,请要求我澄清 基本上,我有一个程序,它使用两个游标根据某些条件将segmentid值分配给flight_times表。在这些情况下,我将1)分配一个segmentID,然后从segments光标获取下一条记录;2)分配一个空值,然后从flight_times光标获取下一行;或3)如果flightdate和flight number不匹配,则从segments光标获取下一行 我遇到的问题是,如果不说我有语法错误

我对SQL相当陌生,因此如果我的代码和/或解释不清楚,我深表歉意,但如果有不清楚的地方,请要求我澄清

基本上,我有一个程序,它使用两个游标根据某些条件将segmentid值分配给flight_times表。在这些情况下,我将1)分配一个segmentID,然后从segments光标获取下一条记录;2)分配一个空值,然后从flight_times光标获取下一行;或3)如果flightdate和flight number不匹配,则从segments光标获取下一行

我遇到的问题是,如果不说我有语法错误,我就无法让IF语句接受多个语句。例如,在我尝试分配一个空值之后,我无法从times游标中获取另一条记录。我将感谢任何人对我在这里做错的事情提供的任何帮助。我已经阅读了MySQL手册,它确实表明我可以有多条语句

CREATE PROCEDURE write_flight_times(OUT f_date DATE, OUT f_no VARCHAR(20), OUT s_segid INT, OUT s_iataid CHAR(3),
OUT ft_date DATE, OUT ft_no VARCHAR(20), OUT ft_iataid CHAR(3))

BEGIN

DECLARE var_no_more_rows BOOLEAN DEFAULT FALSE;
DECLARE var_no_more_rows1 BOOLEAN DEFAULT FALSE;

DECLARE cur_segments CURSOR FOR 
    SELECT flightdate, flightno, segmentid, iataid
    FROM flights f JOIN segments s ON f.flightid = s.flights_flightid
    ORDER BY flightdate, flightno, segmentid;

DECLARE cur_times CURSOR FOR 
    SELECT flights_flightdate, flights_flightno, a.iataid
    FROM temp_flight_times tft JOIN airports a ON a.icaoid = tft.airports_icaoid
    ORDER BY flights_flightdate, flights_flightno, depttime;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET var_no_more_rows := TRUE;
SET var_no_more_rows1 := TRUE;

OPEN cur_segments;

loop_segments:
LOOP
    FETCH cur_segments INTO f_date, f_no, s_segid, s_iataid;
    IF var_no_more_rows THEN
       CLOSE cur_segments;
       LEAVE loop_segments;
    END IF;

    OPEN cur_times;

    loop_times:
    LOOP
        FETCH cur_times INTO ft_date, ft_no, ft_iataid;
            IF var_no_more_rows1 THEN
               CLOSE cur_times;
               LEAVE loop_times;
            END IF;

            IF (f_date = ft_date AND f_no = ft_no) THEN
                IF s_iataid = ft_iataid THEN
                    s_segid;
                ELSE
                    NULL;
                    FETCH cur_times INTO ft_date, ft_no, ft_iataid;
                END IF
            ELSE
                FETCH cur_segments INTO f_date, f_no, s_segid, s_iataid;
            END IF) AS segmentid
     END LOOP loop_times;
  END LOOP loop_segments;  
  END$$

问题是,在存储的进程中不能有多个“未找到”处理程序,因此当内部循环获得“未找到”条件时,外部循环的“未找到行”变量也设置为true,从而终止外部循环


解决方案是将逻辑拆分为两个存储过程-每个游标一个-并从外部调用内部存储过程。

您提供的代码是否给出错误?抱歉,是错误1064语法错误。它在if语句的分号上,就在s_segid之后谢谢你的回答,我将拆分它们,但是现在我的错误在if语句本身中——请参阅上面的注释了解错误