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 - 存储过程语法问题的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:存储过程语法错误

mysql存储过程语法及实例

mysql存储过程语法及实例

mysql存储过程语法及实例

试图在 Mysql 中创建存储过程的语法错误?

Mysql语法错误创建存储过程