我在我的數據庫(MySQL)中創建了一些存儲過程,如下所示。返回多個記錄集的MySQL存儲過程
存儲過程1
CREATE PROCEDURE sp_Name1(
param1,
param2,
......
)
BEGIN
.....
some code
IF cond THEN
call sp_Name2 //Calling 2nd procedure from here.
Update SomeTable .....
SELECT '1' As Result;
END IF
END
存儲過程2
CREATE PROCEDURE sp_Name2(
param1,
param2,
......
)
BEGIN
.....
some code
IF cond THEN
SELECT '2' As Result;
SELECT '3' As Result;
END IF
END
現在,我打電話給我的第一個存儲過程如下:
Call sp_Name1(param1, param2, ...);
在這裏我得到4個的結果集MySQL工作臺。 2的結果來自sp_Name2,第3個用於sp_Name1中的更新語句,第4個來自select語句,同樣位於sp_Name1中。在這裏,我正在尋找最後的結果集。有時結果序列以預期的順序出現,這意味着結果可能會像結果1,結果2,結果4,結果3一樣出現(在這種情況下,我無法判斷哪個結果集對我有用,因爲上一個結果集可能被改變)。
如何抑制不需要的結果集?
編輯: 我有用例,以便您更好地理解。
CREATE PROCEDURE sp_LoginUser(IN Username varchar(50) , IN password varchar(50))
BEGIN
IF EXISTS(SELECT 1 FROM Users where name = UserName and Pwd = password)
SET userid = 0;
SET loginid = 0;
SELECT userid INTO userid
FROM users
WHERE name = UserName and Pwd = password;
IF userid > 0 THEN
CALL sp_Login(userid);
SET loginid = LAST_INSERT_ID();
END IF;
//only this result i am expecting.
IF loginid > 0 THEN
SELECT userid as userid, loginid AS loginid;
ELSE
SELECT 0 userid, 0 loginid;
END IF;
END IF;
END
CREATE PROCEDURE sp_Login(IN Userid int)
BEGIN
INSERT Logins (userid, datetime)
VALUES (Userid, now());
SELECT LAST_INSERT_ID() AS loginid;
END
所以,當我的用戶請求的登錄名和密碼爲我的登錄頁面上輸入他/她的用戶名現在,那麼我有我的服務器上調用sp_LoginUser()。在很多情況下,我必須分別調用sp_Login()。
在上面的例子中,我可以在sp_Login()過程中設置一個參數(例如loginid)AS INOUT,爲其分配LAST_INSERT_ID(),刪除SELECT語句並在sp_LoginUser()中檢索。 但是當我需要分別調用sp_Login()時,我必須在我的編碼中聲明一些變量來檢索值。
您能否請您發佈一些我們可以運行的有意義的示例代碼,以便重現您所面臨的問題?您發佈的代碼完全不明確。 – Rachcha