gpt4 book ai didi

mysql - MySQL存储过程OUT参数返回结果集

转载 作者:可可西里 更新时间:2023-11-01 07:09:40 25 4
gpt4 key购买 nike

我在 MySQL 中有一个过程,它有两个输入参数:userLogin(VARCHAR) 和 userPassword(VARCHAR),以及两个输出参数:userID (INT) 和 userRights(VARCHAR)。

过程如下:检查数据库中是否存在具有给定登录名和密码的用户,如果存在,则返回其 ID、用户权限和设置。权限可以连接成一个字符串,但我想避免连接和随后解析 websettings,因为数据的结构更复杂。

现在,我的过程仅返回 userID 和 userRights,如果成功,我将运行另一个选择语句来获取设置。

当前程序:

DELIMITER $$
CREATE PROCEDURE `proc_login_user`(IN UserName VARCHAR(45), IN Pwd VARCHAR(250), OUT Uid INT, OUT Rights VARCHAR(100))
BEGIN
DECLARE Uname VARCHAR(45);
DECLARE Pass VARCHAR(250);
DECLARE UserId INT;
SET @Uname := UserName;
SET @Pass := Pwd;
SET @UserId = (SELECT ID FROM `users` WHERE Login = @Uname AND Password = @Pass);
SET Uid = @UserId;
SET Rights = /* some SELECT GROUP_CONCAT statement to create string */
END;

我想在过程中再添加一个输出参数:userSettings,它应该是一个结果集。

像这样:

DELIMITER $$
CREATE PROCEDURE `proc_login_user`(IN UserName VARCHAR(45), IN Pwd VARCHAR(250), OUT Uid INT, OUT Rights VARCHAR(100), OUT Settings)
BEGIN
DECLARE Uname VARCHAR(45);
DECLARE Pass VARCHAR(250);
DECLARE UserId INT;
SET @Uname := UserName;
SET @Pass := Pwd;
SET @UserId = (SELECT ID FROM `users` WHERE Login = @Uname AND Password = @Pass);
SET Uid = @UserId;
SET Rights = /* some SELECT GROUP_CONCAT statement to create string */
SET Settings = SELECT * FROM `settings` WHERE UserID = @UserId;
END;

如有任何帮助,我们将不胜感激。

谢谢,兹贝内克

最佳答案

MySQL 不允许变量包含结果集或表;它们只是单个标量值。

在存储过程中,您可以简单地运行一个 SELECT,结果集将返回给客户端。您不能在 MySQL 中的其他存储例程中使用该结果集,但调用该过程的应用程序可以像使用任何其他查询结果一样使用它。

顺便说一句:

DECLARE Uname VARCHAR(45);
SET @Uname := UserName;

这两行没有任何关系。局部变量“Uname”和用户变量“@Uname”是完全不同的东西。在这种特殊情况下,您不需要任何一个。您可以在查询中直接引用 IN/OUT 变量(只要确保这些变量与表中的列名不同,否则您可能会得到意想不到的结果。)

DELIMITER $$
CREATE PROCEDURE `proc_login_user`(IN UserName VARCHAR(45), IN Pwd VARCHAR(250), OUT Uid INT, OUT Rights VARCHAR(100))
BEGIN
SELECT ID INTO Uid FROM `users` WHERE Login = UserName AND Password = Pwd;
/* some SELECT GROUP_CONCAT INTO Rights statement to create string */
SELECT * FROM `settings` WHERE UserID = Uid;
END;

关于mysql - MySQL存储过程OUT参数返回结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29138849/

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