Я создал несколько хранимых процедур в моей базе данных (MySQL) следующим образом.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, ...);
Здесь я получаю 4 наборов результатов в MySQL Workbench. 2 результатов из sp_Name2, 3rd для оператора update в sp_Name1 и 4th из оператора select, также в sp_Name1. Здесь я ищу только последний набор результатов. Иногда последовательность результатов появляется в ожидаемом порядке, что означает, что результаты могут появляться как Результат 1, Результат 2, Результат 4, Результат 3 (В этом случае я не могу судить, какой набор результатов полезен для меня, поскольку последний набор результатов может быть изменен).
Как подавить нежелательные наборы результатов?
EDIT: У меня есть кейс для вашего лучшего понимания.
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) AS INOUT в процедуре sp_Login(), назначить ему LAST_INSERT_ID(), удалить инструкцию SELECT и получить в sp_LoginUser(). Но когда мне нужно вызвать sp_Login() отдельно, мне нужно объявить некоторую переменную в моей кодировке, чтобы получить значение.
Не могли бы вы разместить какой-нибудь осмысленный образец кода, который мы могли бы запустить, чтобы воспроизвести проблему, с которой вы столкнулись? Код, который вы опубликовали, является полностью двусмысленным. – Rachcha