我在我的数据库 (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,第 3 个来自 sp_Name1 中的更新语句,第 4 个来自 select 语句,也在 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()。
在上述情况下,我可以在 sp_Login() 过程中将一个参数(例如 loginid)设置为 INOUT,将 LAST_INSERT_ID() 分配给它,删除 SELECT 语句并在 sp_LoginUser() 中检索。 但是当我需要单独调用 sp_Login() 时,我必须在我的代码中声明一些变量来检索值。
最佳答案
如果您不想要这些结果集,请不要选择它们。
关于返回多个记录集的 MySQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20629558/