Я прихожу из фона MS SQL Server. Работа над новым проектом с использованием MySQL с инструментами NaviCat 8 Admin. Хорошо, вот вопрос. Обычно, когда я работаю в MS, если я хочу обновить некоторые данные, я использую хранимую процедуру для этого:
Drop Procedure spNew
Create Procedure spNew (@P_Param)
UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param
Я пытаюсь сделать эту же логику из NaviCat.
Я определил параметр (IN '@P_Param' int)
В определении i, помещенном:
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param
END;
Когда я пытаюсь сохранить хранимую процедуру, я получаю эту ошибку: "1064 - У вас есть ошибка в синтаксисе SQL, blah, blah, blah"
Может ли кто-нибудь хотя бы указать мне в правильном направлении?
Спасибо.
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param;
END;
Обратите внимание, что синтаксис MySQL
и общая идеология сильно отличаются от синтаксиса SQL Server
.
Вам также может потребоваться установить разделитель:
DELIMITER $$
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param;
END;
$$
DELIMITER ;
Кстати, я предполагаю, что вы фактически не называете свою таблицу "Table"
, так как это зарезервированное слово.
Если вы это сделаете, вам нужно вложить его в обратные такты:
DELIMITER $$
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE `Table`
SET `Field` = 'some value'
WHERE `ID` = P_Param;
END;
$$
DELIMITER ;
Параметры хранимых процедур MySQL не имеют префикса @или указаны в объявлении или при использовании. Однако локальные переменные имеют префикс @.
Try:
DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param
END;