I created several stored procedures in my database (MySQL) as follows.
Stored Procedure 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
Stored Procedure 2
CREATE PROCEDURE sp_Name2( param1, param2, ...... ) BEGIN ..... some code IF cond THEN SELECT '2' As Result; SELECT '3' As Result; END IF END
Now I call my first stored procedure as follows:
Call sp_Name1(param1, param2, ... );
Here I get 4 result sets in MySQL Workbench. 2 results from sp_Name2, 3rd for the update statement in sp_Name1 and 4th from the select statement, also in sp_Name1. Here I am looking only for the latest result set. Sometimes the sequence of results appears in the expected order, which means that the results can appear as Result 1, Result 2, Result 4, Result 3 (In this case, I can not judge which set of results is useful to me, since the last set of results can be changed )
How to suppress unwanted result sets?
EDIT: I have a precedent for your better understanding.
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
So now, when my user requests a login and enters his username with password on my login page, I have a call to sp_LoginUser () on my server. In many cases, I have to call sp_Login () separately.
In the above case, I can set one parameter (for example, loginid) AS INOUT in the sp_Login () procedure, assign it LAST_INSERT_ID (), delete the SELECT statement and get it in sp_LoginUser (). But when I need to call sp_Login () separately, I need to declare some variable in my encoding to get the value.