gpt4 book ai didi

mysql多存储过程更新

转载 作者:行者123 更新时间:2023-11-30 22:13:57 27 4
gpt4 key购买 nike

我在使用 mysql updateusers 存储过程时遇到了一些问题,如下所示:

 DELIMITER go

Create procedure updateusers(
IN UserID tinyint(11),
IN FirstName varchar(30),
IN LastName varchar(30),
IN Password varchar(30),
IN EmailAddress varchar(30),
IN Salt varchar(40),
IN RoleID varchar(1))
BEGIN
update users
set
FirstName = FirstName
where UserID = UserID
End
BEGIN
update users
set
LastName = LastName
where UserID = UserID

End
BEGIN
update users
set
Password = Password
where UserID = UserID

End
BEGIN
update users
set
EmailAddress = EmailAddress
where UserID = UserID
End
BEGIN
update users
set
Salt = Salt
where UserID = UserID
End

BEGIN
update users
set
RoleID = RoleID
where UserID = UserID;
End
go

DELIMITER ;

我在第 16 行遇到错误:

MySQL said: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

'End BEGIN update  users set
LastName = LastName
where UserID = Us' at line 16

然后我会像这样使用调用存储过程:

call updateusers(3,'John','Jamieson','dsd','jamie@gmail.com','abac123','U')

我想获得的输出是例如,如果我想从以下位置更新:

 UserId  FirstName  LastName  Password  EmailAddress    Salt  RoleID
3 John Smith abc john@gmail.com 123 U

为此:

 UserId  FirstName  LastName  Password  EmailAddress       Salt    RoleID
3 John Jamieson dsd jamie@gmail.com abac123 U

UserId  FirstName  LastName  Password  EmailAddress       Salt    RoleID
3 Aaron Smith abc john@gmail.com 123 A

最佳答案

诚然,MySQL 存储过程的文档从来都不是很好。没有足够的例子。

在你的情况下,我会这样写程序:

 DELIMITER go

CREATE PROCEDURE updateusers(
IN inUserID tinyint,
IN inFirstName varchar(30),
IN inLastName varchar(30),
IN inPassword varchar(30),
IN inEmailAddress varchar(30),
IN inSalt varchar(40),
IN inRoleID varchar(1))
BEGIN
UPDATE users
SET
FirstName = inFirstName,
LastName = inLastName,
Password = inPassword,
EmailAddress = inEmailAddress,
Salt = inSalt,
RoleID = inRoleID
WHERE UserID = inUserID;
END
go

DELIMITER ;

变化:

  • 将您的输入参数命名为与您表中的列名称不同的名称,否则,如果您想将 FirstName 设置为同名的输入参数或它本身(这将是一个空操作),这将是不明确的。为了消除歧义,我只是使用“in”作为输入参数的前缀。
  • 您可以在单个 UPDATE 中更新多个列。事实上,您应该这样做,因此您只需运行一个查询即可找到要更新的行。
  • 您不需要BEGIN...END 围绕每个语句,只需围绕语句 block ,类似于您在许多编程语言中使用花括号的方式。
  • 用分号终止您的 UPDATE 语句。
  • 我将 tinyint(11) 更改为简单的 tinyint。长度参数不做任何事情。阅读我对 Types in MySQL: BigInt(20) vs Int(20) 的回答

关于mysql多存储过程更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com