在MySQL中存儲過程的OUT參數中返回結果集 [英] Return result set in OUT parameter of Stored Procedure in MySQL
本文介紹了在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參數中返回結果集的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!
查看全文