首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql语法帮助

Mysql语法帮助
EN

Stack Overflow用户
提问于 2009-12-09 20:16:59
回答 2查看 68关注 0票数 0

我在MySQL中编写SP时遇到问题。从我在网上读到的信息来看,以下内容应该是可行的,但事实并非如此。我使用Mysql v5.1.35

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-10 06:52:52

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

在第一行中,尝试如下所示:

代码语言:javascript
复制
CREATE DEFINER='My_Username'@'%' PROCEDURE ChangePassword(IN SPusername VARCHAR(100),

哦..。记住还要看一下astander在UPDATE语句中关于WHERE子句的回答。如果不扩展WHERE子句,所有密码都将设置为相同的内容...每次都是这样!他的建议是好的!(尽管SQL语句可以工作) :-)

问候

*Sigersted

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

代码语言:javascript
复制
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 ;
票数 1
EN

Stack Overflow用户

发布于 2009-12-09 21:04:18

看起来您可能在UPDATE语句中缺少IF EXISTS检查中的WHERE语句。

将其更改为

代码语言:javascript
复制
UPDATE Customer
SET Password_Hashed = SPnewPassword
WHERE SPusername = Email
AND  SPoldPassword = Password_Hashed
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1873541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档