2016-11-25 2 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)) НАЧАТЬ DECLARE BestelID INT DEFAULT 0 \t Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 4 \t 0.000 sec –

ответ

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. Это все о неприятной ошибке синтаксиса. –

Смежные вопросы