Я использую MySQL через phyMyAdmin на GoDaddy. Я могу выполнить эту инструкцию и одно целое значение возвращается без каких-либо проблем:Ошибка MySQl # 1064 Сохраненная процедура IF ELSE с несколькими инструкциями SELECT
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = 2) LIMIT 0,1;
Однако, когда я пытаюсь создать следующую хранимую процедуру, я получаю следующее сообщение об ошибке:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 25
DROP PROCEDURE IF EXISTS `spGetPreferredRunNumbers`$$
CREATE PROCEDURE `spGetPreferredRunNumbers`(IN prefTimeRange INT(4), INOUT run1 INT(4), INOUT run2 INT(4), INOUT run3 INT(4), INOUT run4 INT(4), INOUT run5 INT(4))
BEGIN
IF (prefTimeRange = 2) THEN BEGIN
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 0,1 INTO run1;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 1,1 INTO run2;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 2,1 INTO run3;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 3,1 INTO run4;
SET run5 = -1;
END;
ELSE IF (prefTimeRange = 3) THEN BEGIN
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 0,1 INTO run1;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 1,1 INTO run2;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 2,1 INTO run3;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 3,1 INTO run4;
SET run5 = -1;
END;
ELSE BEGIN
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 0,1 INTO run1;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 1,1 INTO run2;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 2,1 INTO run3;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 3,1 INTO run4;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 4,1 INTO run5;
END;
END IF;
END$$
DELIMITER;
Да , Я тестировал другие команды выбора с разными ограничениями отдельно, и они отлично работают, за исключением случаев, когда вы используете 2 или 3 для prefTimeRange при выборе LIMIT 4,1. PrefTimeRange 2-х & 3 возвращают только четыре результата, поэтому я задаю -1 до run5 если prefTimeRange является 2 или 3.
я получаю такую же точную ошибку или не делать, я это: prefTimeRange = 3
или это: prefTimeRange = "3"
Да, я помню, чтобы сообщить phpMyAdmin, что правильный разделитель равен $$.
Что мне не хватает ????
Вам нужно изменить разделитель перед началом процедуры создания ... 'delimiter $$' проверить, сделали ли вы это? – Meherzad
Спасибо за предложение Мехерзада, но, как я сказал в нижней части сообщения, я помню, чтобы это сделать. – AstroLovesCodey