Я вижу, что проблема, которую вы пытаетесь решить, довольно сложна:
Когда есть строка с указанным GDEPO, она представляет запас, поступающий в депо, и вы хотите использовать E_CIKAN из этой строки , чтобы отследить, какая часть запаса будет использована позже. E_CIKAN начнется с 0, а затем будет добавлен по мере того, как акции выходят, пока не достигнет ADET.
Таким образом, когда есть следующая строка с указанным CDEPO, она представляет запасы, выходящие на рынок, и вы хотите вернуться к E_CIKAN строки GDEPO и откорректировать E_CIKAN, добавив количество запаса к это.
Когда были две отдельные строки с входящим запасом (указан GDEPO), иногда возникает переполнение, когда E_CIKAN одной строки достигает максимума (ADET), а затем вы хотите добавить остаток к следующей .
Это довольно сложный расчет, потому что вам нужно сравнивать разные строки, возвращаться назад и изменять значения, возможно, в одной или, возможно, в двух строках, чтобы отслеживать каждую сделку с акциями.
Там может быть способом сделать это без курсора, как предлагают другие. Но я думаю, что если бы вы могли перестроить свои таблицы и сохранить данные по-другому, вы могли бы облегчить проблему.
Например, вместо того, чтобы отслеживать запасы в той же таблице, в которой записываются операции с акциями, вы могли бы иметь отдельную таблицу со столбцами «Product_id, Depo_id, amount», которая отслеживает общую сумму каждого продукта в каждом депо в одно время?
Такое изменение структуры базы данных может упростить задачу.
Или ... вместо использования E_CIKAN для отслеживания того, что используется , используйте его для отслеживания того, что остается . И сохраняйте значение E_CIKAN в каждой строке. Таким образом, всякий раз, когда запас поступает или выходит из депо, пересчитайте E_CIKAN в тот момент времени и сохраните его в этой строке транзакции (вместо того, чтобы пытаться вернуться к исходной строке «в наличии» и обновить это там). Затем, чтобы узнать текущий запас, вы просто посмотрите на самую последнюю сделку для этого продукта / депо.
Подводя итог, я хочу сказать, что ваши вычисления медленные и громоздкие, потому что вы храните данные странным образом. В долгосрочной перспективе, возможно, стоит изменить дизайн базы данных, чтобы упростить программирование.