2017-04-08 1 views
2

안녕, 나는 우리의 저장 방에 선반과 선반 위치에있는 테이블을 업데이트하기 위해 노력하고있어MySQL을 (MariaDB) while 루프

. 15 개의 랙이 있고 각 랙에는 5 개의 선반이 있습니다. 나는 선반이 더 늘어날 때 추가 위치를 추가하기 위해 루프를 20 번 실행하고 있습니다. 지금까지 나는 이것이 torun을 시도한 절차이지만, 내 첫 END IF 근처에서 구문 오류가 발생합니다.

drop PROCEDURE if exists updateLocations; 
    DELIMITER // 
    CREATE PROCEDURE updateLocations() 
    begin 
    DECLARE rack INT default 1; 
    DECLARE shelf INT default 1; 
    WHILE rack<21 DO 
     insert into tblStorageLocations values ("", rack, shelf); 
      IF (shelf=5, SET rack=rack+1, set rack=rack); 
      END IF; 
      IF (shelf<5, SET shelf=shelf+1, set shelf=1); 
      END IF; 
      END WHILE; 
END; 
    // 
    DELIMITER ; 


    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF; 

    IF (shelf<5, SET shelf=shelf+1, set shelf=1); 
    END IF; 
    END WHILE' at line 8 

답변

2

당신은 오히려 문과보다는, 함수로 if를 처리 :

여기 내 문입니다.

drop PROCEDURE if exists updateLocations; 
DELIMITER // 

CREATE PROCEDURE updateLocations() 
BEGIN 
    DECLARE rack INT default 1; 
    DECLARE shelf INT default 1; 
    WHILE rack < 21 DO 
     INSERT INTO tblStorageLocations 
      VALUES ('', rack, shelf); 
     IF shelf = 5 THEN 
      SET rack = rack + 1; 
     END IF; 
     IF shelf < 5 THEN 
      SET shelf = shelf + 1; 
     ELSE 
      SET shelf = 1; 
     END IF; 
    END WHILE; 
END; 
// 
DELIMITER ; 
+0

대단히 감사합니다. 정확히 내가 오해 한 것입니다. – leech911