Хранимые процедуры MySQL - PullRequest
       15

Хранимые процедуры MySQL

0 голосов
/ 28 октября 2009

Я работаю в MS SQL Server. Работа над новым проектом с использованием MySQL с инструментами администратора NaviCat 8. Хорошо, вот вопрос. Обычно при работе в MS Land, если я хочу обновить некоторые данные, я использую хранимую процедуру для этого:

Drop Procedure spNew
Create Procedure spNew (@P_Param)

UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param

Я пытаюсь сделать ту же логику из NaviCat. Я определил параметр, (IN '@P_Param' int)

В определении я поместил:

BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = @P_Param
END;

Когда я пытаюсь сохранить хранимую процедуру, я получаю эту ошибку: «1064 - у вас есть ошибка в синтаксисе SQL, бла, бла, бла»

Может ли кто-нибудь хотя бы указать мне правильное направление?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 октября 2009
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 ;
0 голосов
/ 28 октября 2009

Параметры хранимых процедур MySQL не имеют префикса @ и не заключаются в кавычки ни в объявлении, ни при использовании. Однако локальные переменные имеют префикс @.

Попытка:

DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param
END;
...