【问题标题】:Mysql syntax helpMysql语法帮助
【发布时间】:2009-12-09 12:16:59
【问题描述】:

我在 MySQL 中编写 SP 时遇到问题。根据我在网上可以阅读的内容,以下内容应该可以工作,但事实并非如此。我使用 Mysql v. 5.1.35

CREATE DEFINER=`My_Username`@`%` PROCEDURE `ChangePassword`(IN SPusername VARCHAR(100),
    IN SPoldPassword VARCHAR(100),
    IN SPnewPassword VARCHAR(100))
BEGIN
IF EXISTS(SELECT Password_Hash 
                FROM Customer
                WHERE SPusername = Email 
                AND  SPoldPassword = Password_Hashed)
THEN
UPDATE Customer
SET Password_Hashed = SPnewPassword
END IF;
END;

【问题讨论】:

  • 什么不起作用,错误是什么?
  • 您是否将 DELIMTER 更改为 ; 以外的其他内容DELIMTER // 过程代码 //
  • 我收到此错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 12 行的“END IF”附近使用正确的语法

标签: sql mysql stored-procedures


【解决方案1】:

我认为是因为过程名称不应该在's中。

在第一行,试试这个:

CREATE DEFINER='My_Username'@'%' PROCEDURE ChangePassword(IN SPusername VARCHAR(100),

哦...记住还要查看 asstander 对 UPDATE 语句中 WHERE 子句的回答。如果不扩展 WHERE 子句,所有密码都将设置为相同的东西……每次!他的建议很好! (虽然 SQL 语句可以工作):-)

问候
西格斯特

PS:完整的查询(带分隔符和旁观者的建议):

DELIMITER //
CREATE DEFINER='My_Username'@'%' PROCEDURE ChangePassword(
    IN SPusername VARCHAR(100),
    IN SPoldPassword VARCHAR(100),
    IN SPnewPassword VARCHAR(100))
BEGIN
IF EXISTS(SELECT Password_Hash 
          FROM Customer
          WHERE SPusername = Email 
          AND  SPoldPassword = Password_Hashed)
THEN
  UPDATE Customer
  SET Password_Hashed = SPnewPassword
  WHERE SPusername = Email 
  AND  SPoldPassword = Password_Hashed;
END IF;
END//
DELIMITER ;

【讨论】:

    【解决方案2】:

    您似乎在 UPDATE 语句中的 IF EXISTS 检查中遗漏了 WHERE 语句。

    改成

    UPDATE Customer
    SET Password_Hashed = SPnewPassword
    WHERE SPusername = Email
    AND  SPoldPassword = Password_Hashed
    

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 1970-01-01
      • 2011-02-11
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多