У меня есть написанное мной утверждение UPDATE, которое примет @CHANGE
(положительное или отрицательное целочисленное значение) и обновит CURRENT_INVENTORY
для этого типа элемента.
UPDATE ITEM_INVENTORY
SET CURRENT_INVENTORY = MAX(CURRENT_INVENTORY + @CHANGE, 0),
LAST_UPD_TSTAMP = CURRENT_TIMESTAMP,
LAST_UPD_SOURCE = @SOURCE
WHERE LOCATION = @LOCATION
AND ITEM_TYPE = @ITEM_TYPE;
Я быхотелось бы узнать, что такое CURRENT_INVENTORY
до и после запуска этого обновления.Есть ли способ выбрать значения *1001* и FINAL TABLE
CURRENT_INVENTORY
?
Я хочу отобразить сообщение в соответствии с "{location} инвентаризацией"изменен с {старый} на {новый} ".Я мог бы использовать отдельный SELECT, чтобы получить старое / текущее значение, выполнить математику в моем коде, а затем ОБНОВИТЬ строку в таблице.Я считаю, что это будет восприимчиво к условиям гонки (поскольку первый SELECT не заблокирует строку), поэтому я пытаюсь сделать это в одном запросе.
Не думаю, что смогу выбратьИ СТАРЫЙ, и ФИНАЛЬНЫЙ, поэтому я считаю, что лучшие решения, которые у меня есть, это:
- Выберите значение из
OLD TABLE
и продублируйте логику из оператора CASE для получения нового значения - Выбратьзначение из
OLD TABLE
и выберите новое значение (в той же транзакции, когда мое ОБНОВЛЕНИЕ заблокировало строку)
Есть ли лучший / правильный способ сделать это?