CREATE PROCEDURE createControlLst (IN pipeId VARCHAR(50),IN pointId VARCHAR(50))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE cnt INT DEFAULT 0;
DECLARE stempoint VARCHAR(50);
DECLARE ID1 VARCHAR(50);
DECLARE leftpoint1 VARCHAR(50);
DECLARE rightpoint1 VARCHAR(50);
DECLARE Huan1 VARCHAR(50);
DECLARE cur1 CURSOR FOR SELECT ID,leftpoint,rightpoint,Huan FROM gistest where ID<>pipeId and (leftpoint=pointId or rightpoint=pointId);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
insert into tmppipeLst values (null,pipeId);
SET @@max_sp_recursion_depth = 100;
OPEN cur1;
FETCH cur1 INTO ID1,leftpoint1,rightpoint1,Huan1;
WHILE done=0 DO
IF(Huan1 = 1) THEN
(
select count(*) INTO cnt from gisfa WHERE ParentID=ID1;
IF(cnt= 0) THEN
(IF(leftpoint1 = pointId) THEN
(set stempoint=rightpoint1;
CALL createControlLst(ID1,stempoint));
ELSEIF (rightpoint1 = pointId) THEN
(set stempoint=leftpoint1;
CALL createControlLst(ID1,stempoint);)
END IF;)
ELSEIF (cnt>0) THEN
INSERT INTO tmpfaLst (ID) SELECT ID FROM gisfa WHERE ParentID=pipeId ;
END IF;)
END IF;
FETCH cur1 INTO ID1,leftpoint1,rightpoint1,Huan1;
END WHILE;
CLOSE cur1;
END
IF(Huan1 = 1) THEN
IF(cnt= 0) THEN
(IF(leftpoint1 = pointId) THEN
ELSEIF (rightpoint1 = pointId) THEN
END IF;)
ELSEIF (cnt>0) THEN
END IF;
END IF;
END IF;
把endif拿出来你就会发现你少了一个ENDif
语句块把()去掉,不用,而且写代码都不缩进的,看得不累吗?
CREATE PROCEDURE createControlLst (IN pipeId VARCHAR(50),IN pointId VARCHAR(50))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE cnt INT DEFAULT 0;
DECLARE stempoint VARCHAR(50);
DECLARE ID1 VARCHAR(50);
DECLARE leftpoint1 VARCHAR(50);
DECLARE rightpoint1 VARCHAR(50);
DECLARE Huan1 VARCHAR(50);
DECLARE cur1 CURSOR FOR SELECT ID,leftpoint,rightpoint,Huan FROM gistest where ID<>pipeId and (leftpoint=pointId or rightpoint=pointId);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
insert into tmppipeLst values (null,pipeId);
SET @@max_sp_recursion_depth = 100;
OPEN cur1;
FETCH cur1 INTO ID1,leftpoint1,rightpoint1,Huan1;
WHILE done=0 DO
IF (Huan1 = 1) THEN
select count(*) INTO cnt from gisfa WHERE ParentID=ID1;
IF cnt=0 THEN
IF(leftpoint1 = pointId) THEN
set stempoint=rightpoint1;
CALL createControlLst(ID1,stempoint);
ELSEIF (rightpoint1 = pointId) THEN
set stempoint=leftpoint1;
CALL createControlLst(ID1,stempoint);
END IF;
ELSEIF (cnt>0) THEN
INSERT INTO tmpfaLst (ID) SELECT ID FROM gisfa WHERE ParentID=pipeId ;
END IF;
END IF;
FETCH cur1 INTO ID1,leftpoint1,rightpoint1,Huan1;
END WHILE;
CLOSE cur1;
END