У меня есть эта функция в моей БД
CREATE FUNCTION BookBed (pPaciente varchar(255),
pHospital bigint(20)) RETURNS BOOLEAN
BEGIN
DECLARE NumLeitosDisponiveis INT;
DECLARE vReservaOK BOOLEAN;
DECLARE dt TIMESTAMP;
SET dt = (Select now());
SET NumLeitosDisponiveis = (SELECT AVAILABLEBEDCOUNT FROM HOSPITAL WHERE ID = pHospital);
IF((SELECT NumLeitosDisponiveis) > 0) THEN
BEGIN
START TRANSACTION;
INSERT INTO RESERVATION(PERSON, HOSPITAL, DATE) VALUES (pPaciente, pHospital, dt);
UPDATE HOSPITAL
SET AVAILABLEBEDCOUNT = AVAILABLEBEDCOUNT - 1
WHERE ID = pHospital;
SET vReservaOk = true;
commit;
END;
ELSE
SET vReservaOk = false;
END IF;
RETURN vReservaOK;
END;
В части if моего оператора if-else я хотел бы выполнить все операции атомарным способом.Я хотел использовать команду START TRANSACTION, но они не разрешены в функциях, и я не смог найти другую команду для ее выполнения.
Являются ли функции атомарными по умолчанию?Если нет, есть ли способ, которым я могу это реализовать?
Спасибо, Оскар
РЕДАКТИРОВАТЬ: И если я должен использовать функцию, возможно ли иметь транзакции?