我已在我的数据库(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, ... );
在MySQL Workbench中,我得到了4个结果集。其中2个来自sp_Name2,第三个是sp_Name1中的更新语句,第四个是sp_Name1中的选择语句。我只需要最后一个结果集。有时结果顺序会按照预期顺序出现,这意味着结果可能会像Result 1、Result 2、Result 4、Result 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()。
在上述情况下,我可以将一个参数(例如loginid)设置为sp_Login()过程中的INOUT,并将LAST_INSERT_ID()分配给它,删除SELECT语句并在sp_LoginUser()中检索。
但是,当我需要单独调用sp_Login()时,我必须在我的代码中声明一些变量来检索值。