2016-11-25 85 views
1

我想創建一個處理來自我們網站的訂單的存儲過程。問題是,當我運行腳本時出現MySQL語法錯誤。我對MySQL存儲過程很陌生。有人可以看我的代碼嗎?通過創建存儲過程導致MySQL錯誤

USE postbrood; 
DELIMITER // 
CREATE PROCEDURE MaakBestelling(IN KlantIDParam INT, IN ProductIDArray VARCHAR(255), IN AantalArray VARCHAR(255)) 

BEGIN 
DECLARE BestelID INT DEFAULT 0; 
DECLARE ArrayLenght INT DEFAULT 0; 
DECLARE Counter INT DEFAULT 0; 



SET ArrayLenght = LENGTH(ProductIDArray) - LENGTH(REPLACE(ProductIDArray, ',', '')) + 1; 


INSERT INTO bestelling(klantID) VALUES (KlantIDParam); 
SET BestelID = LAST_INSERT_ID(); 

WHILE Counter < ArrayLenght DO 
INSERT INTO bestelregel VALUES (SUBSTRING_INDEX(ProductIDArray,',',Counter),BestelID,SUBSTRING_INDEX(AantalArray,',',Counter)); 
SET Counter = Counter + 1; 
END WHILE; 
END// 
DELIMITER ; 

在此先感謝!

+0

您的'END'缺少您先前定義的分隔符。它應該是'END //'不只是'END' –

+0

**下一個錯誤**:09:43:21 \t CREATE PROCEDURE MaakBestelling(IN KlantIDParam INT,IN ProductIDArray VARCHAR(255),IN AantalArray VARCHAR(255))BEGIN DECLARE BestelID INT DEFAULT 0 \t錯誤代碼:1064.您的SQL語法錯誤;檢查與你的MySQL服務器版本相對應的手冊,在第4行\t 0.000秒附近使用正確的語法 –

回答

1

釘它! :)

USE postbrood; 
DELIMITER // 
CREATE PROCEDURE MaakBestelling(IN KlantIDParam INT, IN ProductIDArray VARCHAR(255), IN AantalArray VARCHAR(255)) 

BEGIN 
DECLARE BestelID INT DEFAULT 0; 
DECLARE ArrayLenght INT DEFAULT 0; 
DECLARE Counter INT DEFAULT 0; 



SET ArrayLenght = LENGTH(ProductIDArray) - LENGTH(REPLACE(ProductIDArray, ',', '')) + 1; 


INSERT INTO bestelling(klantID) VALUES (KlantIDParam); 
SET BestelID = LAST_INSERT_ID(); 

WHILE Counter < ArrayLenght DO 
INSERT INTO bestelregel VALUES (SUBSTRING_INDEX(ProductIDArray,',',Counter),BestelID,SUBSTRING_INDEX(AantalArray,',',Counter),2.50); 
SET Counter = Counter + 1; 
END WHILE; 
END// 
DELIMITER ; 
0

我覺得逗號不是在

SET ArrayLenght = LENGTH(ProductIDArray) - LENGTH(REPLACE(ProductIDArray, ',', '')) + 1; 

被認可你應該嘗試與ascii實體號代替逗號:&#44;

+0

第1行仍然有語法錯誤。這一切都與討厭的語法錯誤有關。 –