在MySQL中存储过程的OUT参数中返回结果集

Return result set in OUT parameter of Stored Procedure in MySQL(在MySQL中存储过程的OUT参数中返回结果集)
本文介绍了在MySQL中存储过程的OUT参数中返回结果集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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;

这篇关于在MySQL中存储过程的OUT参数中返回结果集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)