[英]MySQL Stored Procedures
我来自MS SQL Server背景。 使用带有NaviCat 8 Admin工具的MySQL处理新项目。 好,这是问题。 通常,在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语法有错误,等等,等等,等等”
至少有人能指出我正确的方向吗?
谢谢。
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存储过程的参数在声明中或使用时不以@或前缀作为前缀。 但是,局部变量以@开头。
尝试:
DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.