2013-04-15 133 views
2

我在GoDaddy上通過phyMyAdmin使用MySQL。然而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; 

是,我已經單獨測試了具有不同限制的其他select語句,並且它們也可以正常工作,除非在選擇LIMIT 4,1時使用2或3作爲prefTimeRange。該prefTimeRange的2 & 3只返回四個結果,所以我分配-1到run5如果prefTimeRange爲2或3

我得到同樣的確切的錯誤是否我這樣做:​​或本:prefTimeRange = "3"

是的,我記得告訴phpMyAdmin正確的分隔符是$$。

我在想什麼?

+0

您需要在開始創建過程之前更改分隔符...''delimiter $$'檢查您是否已經完成了此操作? – Meherzad

+0

感謝Meherzad的建議,但正如我在帖子底部所述,我記得要這樣做。 – AstroLovesCodey

回答

0

解決:事實證明ELSE和IF之間的空間需要刪除!

0

這是一個非常糟糕的mysql問題,沒有適當的文檔記錄。 MYSQL存儲過程 - 如果您在ELSE之前留下額外的行或空格,那麼else部分不會執行什麼操作。

IF <your condition> then 
<do this code> 
        <-- extra empty line 
ELSE 
<this always executes no matter what is in IF statement> 

在上面的例子中 - 如果在ELSE上面留空行,else部分總是執行。不要放棄額外的行上面的其他部分if-else。