繁体   English   中英

MySQL存储过程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM