Задавайте вопросы, мы ответим
Вы не зашли.
хранимая процедура с селектом и апдейтом одной и той же таблички - почему-то выполняется дважды...
есть такая процедура:
CREATE PROCEDURE `UpdSubs`(IN SID int, IN UpDown Tinyint)
MODIFIES SQL DATA
BEGIN
declare s tinyint;
declare Rez int;
declare Comm varchar(50);
Select Subscribers.State INTO s from Subscribers where Subscribers.SubscriberID=SID LIMIT 1;
if UpDown = 1 then #up of reserv
if s = 1 then
set Rez = 0; Set Comm = 'Service was Up before Услуга уже включена';
else
set Rez = 1; Set Comm = 'Service is now Up Услуга включена';
update Subscribers set State = 1 where SubscriberID = SID;
end if;
else
if s = 0 then
set Rez = 0; Set Comm = 'Service was Down before Услуга уже отключена';
else
set Rez = 1; Set Comm = 'Service is now Down Услуга отключена';
update Subscribers set State = 0 where SubscriberID = SID;
end if;
end if;
select Rez, Comm;
END
делаем select * from Subscribers where SubscriberID=10000000, убеждаемся что State=0
вызывает стореду: call UpdSubs(10000000,1), которая возвращает результат: Rez=0, Comm = 'Service was Up before Услуга уже включена'
опять делаем select * from Subscribers where SubscriberID=10000000, убеждаемся что State=1
вобщем путем всяческих изменений стореды ясно одно - она выполняется два раза от начала до конца, при этом второй раз уже с измененным State. (так же и зациклить недолго....если алгоритм другой будет.)
Наверное стореда выполняется в неявной транзакции, и когда после селекта таблички видит что эта табличка изменилась - заставляет пройти все сначала....незнаю.
Я в MySQL новичек, подскажите в какую сторону идти.
Да, алгоритм стореды сознательно упрощен для наглядности, не стоит предлагать перестроить алгоритм, чтобы избежать ситуацию select-->update.
Неактивен
Какая версия MySQL? Какие "всяческие изменения"?
Неактивен