MySQL - 存储过程语法问题
Posted
技术标签:
【中文标题】MySQL - 存储过程语法问题【英文标题】:MySQL - Stored Procedures syntax issue 【发布时间】:2016-10-28 08:31:24 【问题描述】:CREATE PROCEDURE `usp_GetUserValidation`
(IN `@Username` VARCHAR(255),
IN `@Password` VARCHAR(50),
OUT `@ErrorCode` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'To validate user login'
BEGIN
IF EXISTS
(SELECT UserID
FROM mt_User
WHERE Username = `@Username`
AND Password = PASSWORD(`@Password`))
BEGIN
SET `@ErrorCode` = 0;
END
ELSE
SET `@ErrorCode` = 1;
SELECT '@ErrorCode' AS res
END
大家好。我是 SQL Server 用户。最近刚开始学习mysql及其存储过程(例程)的编写。谁能指出我犯的导致以下错误的错误是什么?提前谢谢你们:)
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以了解正确的语法使用
在“开始”附近 SET
@ErrorCode
= 0' 在第 15 行
【问题讨论】:
我认为在 Begin 和 End 之间你需要一个实际的查询,而不仅仅是“设置任何内容”。根据错误中的建议查看手册:dev.mysql.com/doc/refman/5.7/en/create-procedure.html 是的。好像是这样 :) 非常感谢兄弟 【参考方案1】:这可能是你想要的。 DELIMITER BLOCK 中的全部内容,以及对 IF 块的一些更改(有一些语法错误)。请注意,它现在保存在我的系统上。
DELIMITER $$
CREATE PROCEDURE `usp_GetUserValidation`
(IN `@Username` VARCHAR(255),
IN `@Password` VARCHAR(50),
OUT `@ErrorCode` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'To validate user login'
BEGIN
IF EXISTS
(SELECT UserID
FROM mt_User
WHERE Username = `@Username`
AND Password = PASSWORD(`@Password`)) THEN
SET `@ErrorCode` = 0;
ELSE
SET `@ErrorCode` = 1;
END IF;
SELECT '@ErrorCode' AS res;
END$$
DELIMITER ;
相关:DELIMITER 是怎么回事。
IF Syntax上的 MySQL 手册页
【讨论】:
以上是关于MySQL - 存储过程语法问题的主要内容,如果未能解决你的问题,请参考以下文章