Ho creato alcune stored procedure nel mio database (MySQL) come segue.Procedura memorizzata MySQL che restituisce più record set
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
Ora io chiamo la mia prima stored procedure come segue:
Call sp_Name1(param1, param2, ...);
Qui sto ottenendo 4 set di risultati in MySQL Workbench. 2 risultati da sp_Name2, 3 ° per l'istruzione di aggiornamento in sp_Name1 e 4 dall'istruzione select, anche in sp_Name1. Qui sto cercando solo l'ultimo set di risultati. A volte la sequenza dei risultati appare nell'ordine atteso, il che significa che i risultati possono entrare come risultato 1, risultato 2, risultato 4, risultato 3 (in questo caso non posso giudicare quale serie di risultati è utile per me, perché l'ultimo set di risultati può essere cambiato).
Come si eliminano i set di risultati indesiderati?
MODIFICA: Ho un caso d'uso per una migliore comprensione.
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
Così, ora, quando il mio utente che richiede di login e di entrare nel suo/la sua nome utente con la password sulla mia pagina di login, allora ho chiamare sp_LoginUser() sul mio server. In molti casi devo chiamare sp_Login() separatamente.
Nel caso precedente posso impostare un parametro (ad esempio loginID) AS INOUT nella procedura sp_Login(), assegnare LAST_INSERT_ID() ad esso, rimuovere l'istruzione SELECT e recuperare in sp_LoginUser(). Ma quando ho bisogno di chiamare sp_Login() separatamente, devo dichiarare alcune variabili nella mia codifica per recuperare il valore.
Potete per favore pubblicare un codice di esempio significativo che potremmo eseguire per riprodurre il problema che state affrontando? Il codice che hai pubblicato è completamente ambiguo. – Rachcha