Мне интересно, будет ли этот sql выполняться параллельно или нет? Это будет новая хранимая процедура sql, которая будет вызывать три другие процедуры. Я хочу, чтобы каждая процедура начиналась после завершения предыдущей.
BEGIN
IF (new_times_flag = TRUE) THEN
CALL PROCEDURE1(dateFor);
ELSE
UPDATE kt_zones_timeslots_settings SET date_for = dateFor WHERE date_for = oldDateFor;
END IF;
CALL PROCEDURE2(dateFor);
CALL PROCEDURE3(dateFor);
END
Я прочитал, как работает sql в процедуре, но я не могу найти точного ответа на этот случай. Каждая следующая процедура зависит от предыдущей, поэтому я хочу, чтобы они работали не параллельно. Более того, эти процедуры состоят из создания временных таблиц, обновлений, удалений, выборок и вставок. Я тоже думал о чем-то вроде этого (транзакция):
BEGIN
BEGIN TRY
BEGIN TRANSACTION
IF (new_times_flag = TRUE) THEN
CALL CalcActualZoneUTR(dateFor);
ELSE
UPDATE kt_zones_timeslots_settings SET date_for = dateFor WHERE date_for = oldDateFor;
END IF;
CALL MakeRealShifts(dateFor);
CALL InsertSeparateShifts(dateFor);
END TRY
BEGIN CATCH
ROLLBACK;
END CATCH
END
Значит, эти процедуры не будут выполняться параллельно? Мне было интересно, не лучше ли поместить всю процедуру в транзакцию?
О какой СУБД идет речь?
Это СУБД - MariaDB.
Транзакции используются совсем по другой причине.
Да, вы правы, я просто рекомендую это, потому что я не хочу выполнять весь sql, если есть проблема в начале. Возможно, мне следует запретить параллельную обработку в моем коде php и yii, потому что я не вижу, как это сделать в sql.
Вызовы в процедуре выполняются один за другим, а не параллельно.
А это значит, что если предыдущий вызов не закончился, то новый не начнется, не так ли?
InsertSeparateShifts
выполнится после завершения MakeRealShifts
.
Спасибо, именно этого ответа я и ждал!
без специальных инструкций параллельно могут выполняться только отдельные запросы, а пакетные запросы — нет.