Голова: BINGO! Вы получили это полностью - это именно то, для чего он идеально подходит. Во многих встроенных средах внешние ограничения и / или сценарий общего использования заставляют программиста отделять выделение объекта от его инициализации. Скомпонованный вместе, C ++ называет это «экземпляр»; но всякий раз, когда действие конструктора должно быть явно вызвано без динамического или автоматического распределения, размещение нового - это способ сделать это. Это также идеальный способ найти глобальный объект C ++, привязанный к адресу аппаратного компонента (I / O с памятью) или для любого статического объекта, который по какой-либо причине должен находиться по фиксированному адресу.
Похоже, вы пропускаете только cursor
.
Ссылочный код можно найти здесь: Курсоры MySql
CREATE PROCEDURE deleteOverlappingBottles()
BEGIN
DECLARE done INT DEFAULT FALSE;
-- Variables for FETCH (change data types to your needs)
DECLARE vBottleBarcode CHAR(100);
DECLARE vt_stamp TIMESTAMP;
DECLARE vParentPrepackId INT;
-- cursor to iterate through the table
DECLARE cur1 CURSOR FOR SELECT BottleBarcode, t_stamp, ParentPrepackId FROM allBottles;
-- apparently MySql needs this to handle the end of the table
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
-- get the three column values for the current row
FETCH cur1 INTO vBottleBarcode, vt_stamp, vParentPrepackId;
IF done THEN
LEAVE read_loop;
END IF;
-- use the variables from FETCH to identify the row in historicdataToDelete
DELETE FROM historicdata2Delete as t
WHERE t.unitADcode = vBottleBarcode AND t.bottle_timestamp = vt_stamp
AND t.prepackId = vParentPrepackId
LIMIT 1; -- delete only 1 row
END LOOP;
CLOSE cur1;
END LOOP;
End;
Отказ от ответственности: Я не знаком с MySql. Синтаксис может быть немного неправильным, пожалуйста, адаптируйтесь к вашим потребностям.