MySQL存储过程返回多个记录集

Man*_*kal 7 mysql sql stored-procedures mysql-workbench

我在我的数据库(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
Run Code Online (Sandbox Code Playgroud)

存储过程2

CREATE PROCEDURE sp_Name2(
    param1,
    param2,
    ...... 
)
BEGIN
   .....
   some code
   IF cond THEN 
       SELECT '2' As Result;

       SELECT '3' As Result;
   END IF
END
Run Code Online (Sandbox Code Playgroud)

现在我调用我的第一个存储过程如下:

Call sp_Name1(param1, param2, ... );
Run Code Online (Sandbox Code Playgroud)

这里我在MySQL Workbench中获得了4个结果集.sp_Name2中的2个结果,sp_Name1中的update语句的第3个结果和select语句中的第4个结果,也是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
Run Code Online (Sandbox Code Playgroud)

所以,现在当我的用户请求登录并在我的登录页面输入他/她的用户名密码时,我就在我的服务器上调用了sp_LoginUser().在许多情况下,我必须分别调用sp_Login().

在上面的例子中,我可以在sp_Login()过程中设置一个参数(例如,loginid)AS INOUT,为其分配LAST_INSERT_ID(),删除SELECT语句并在sp_LoginUser()中检索.但是当我需要单独调用sp_Login()时,我必须在编码中声明一些变量来检索值.

Pra*_*nan 6

如果您不想要这些结果集,请不要选择它们.