2015-03-30 3 views
0

Мне было интересно, где я ошибаюсь, создав эту хранимую процедуру с помощью XAMPP.Проблемы с хранимыми процедурами в MySQL

use PizzaShop; 

delimiter/

CREATE PROCEDURE `updateDelivery` (IN @driver INT(3), IN @orderNum INT(5)) 
BEGIN 
INSERT INTO `orders`(`deliveredBy`,`complete`) VALUES(@driver ,TRUE) WHERE orders.Order_No = @orderNum; 
end; 
/

delimiter ; 

Ошибка я получаю

1064 - У Вас есть ошибка в вашем SQL синтаксиса; в руководстве, соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи '@driver INT (3), IN @orderNum INT (5)) НАЧАТЬ INSERT INTO order (deliveredBy, `' в строке 1

ответ

0

синтаксис с помощью оператора вставки с где положение является недействительным и не имеет особого смысла. присутствие где положение предполагает, что, возможно, что вы хотите сделать, это обновление?

use PizzaShop; 

delimiter/

CREATE PROCEDURE `updateDelivery` (IN driver INT(3), IN orderNum INT(5)) 
BEGIN 
    UPDATE orders 
    SET deliveredBy = driver, completed = TRUE 
    WHERE orders.Order_No = orderNum; 
END/

delimiter ; 
+0

К сожалению, Я уже исправил это. Такая же ошибка после коррекции :( –

+0

@ chris211313 Отправил мой ответ на вопрос. – jpw

+0

Работает хорошо сейчас. Хорошо обнаружено: P –

0

Input имена параметров должны быть локальными переменными для SP, но не с синтаксисом идентификатора переменной сеанса.

Изменение:

(IN @driver INT(3), IN @orderNum INT(5)) 

Для:

(IN driver INT(3), IN orderNum INT(5)) 

insert заявление в СП теле будет:

INSERT INTO `orders`(`deliveredBy`,`complete`) 
VALUES (driver ,TRUE) WHERE orders.Order_No = orderNum; 
+0

'insert ... where' не является допустимой конструкцией. – jpw

+0

Да, это должно быть' update' ... Я только сосредоточился на исходной синтаксической ошибке ... :) –