Мне бы хотелось иметь сложный оператор SQL в качестве события, которое выполняется каждые пару минут.
В настоящее время я делаю это с Java, используя 3 отдельных оператора, которые выполняют последовательность в соединении транзакции.
В: Я не знаю, как создать такой оператор SQL без Java.Если невозможно иметь один оператор SQL, я бы хотел использовать транзакцию (как я использую в Java) и откат в случае сбоя в любом из этих отдельных операторов.
Мой случай: У меня есть 3 таблицы: "Factory
", "Plan
", "Machine
".Я хочу сделать что-то, как показано ниже:
1.
WHERE Machines.annualCheck == "TRUE"
SET Machine.status = "IN_ANNUAL_CHECK"
For machines that got updated I need to do the following:
2.1 Update the related factory
WHERE Factory.id == Machine.linkFactoryID
UPDATE Factory.totalActiveMachines = --1
2.2 Delete the upcoming plans that planned to be handled by the related machine
DELETE rows WHERE Plan.willHandleByMachineID = Machine.ID
ps Я использую MySQL
Спасибо!
Обновление:
Следуя предложению Simonare, я устал делать следующее:
DELIMITER $
CREATE PROCEDURE annualCheck(IN Machine_ID int, IN Factory_ID int)
BEGIN
UPDATE machine_table
SET machine_table.annualCheck = 'IN_ANNUAL_CHECK'
WHERE machine_table.machine_id = Machine_ID;
UPDATE factory_table
SET factory_table.totalActiveMachines = factory_table.totalActiveMachines - 1
WHERE factory_table.factory_id = Factory_ID;
DELETE FROM plan_table WHERE plan_table.assign_to_machine = Machine_ID
END$
DELIMITER $$
BEGIN
SELECT @m_id = machine_id, @f_id = link_factory_id
FROM machine_table
WHERE machine_table.annualCheck = 'TRUE';
END$$
CALL annualCheck(@m_id,@f_id)
Я не знаю почему, но у меня встречаются синтаксические ошибки - одинза другим.Я впервые использую ПРОЦЕДУРУ и РАЗДЕЛИТЕЛЬ.Я правильно делаю?