在MySQL中存储过程的OUT参数中返回结果集
- 作者: 我也不知道为什么
- 来源: 51数据库
- 2022-10-19
问题描述
我在MySQL中有一个过程,它有两个IN参数:UserLogin(VARCHAR)和UserPassword(VARCHAR),以及两个OUT参数:UserID(INT)和UserRights(VARCHAR)。
该过程的工作方式如下:检查数据库中是否存在具有给定登录和密码的用户,如果是,则返回其ID、用户权限和设置。权限可以连接到一个字符串中,但我希望避免连接和随后解析Web设置,因为数据的结构更复杂。现在,我的过程仅返回用户ID和用户权限,如果成功,我将运行另一条SELECT语句以获取设置。
当前程序:
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;
我希望在过程中再添加一个输出参数:应该是结果集的用户设置。
类似以下内容:
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;
推荐阅读
热点文章
检查拆分键盘
0
带有“上一个"的工具栏和“下一个"用于键盘输入AccessoryView
0
Activity 启动时显示软键盘
0
UIWebView 键盘 - 摆脱“上一个/下一个/完成"酒吧
0
在 iOS7 中边缘滑动时,使键盘与 UIView 同步动画
0
我的 iOS 应用程序中的键盘在 iPhone 6 上太高了.如何在 XCode 中调整键盘的分辨率?
0
android:inputType="textEmailAddress";- '@' 键和 '.com' 键?
0
禁用 iPhone 中键盘的方向
0
Android 2.3 模拟器上的印地语键盘问题
0
keyDown 没有被调用
0
