|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Привет всем Как вы обновляте остатки товаров через ХП? Прочитал Хранимые агрегаты без конфликтов и блокировок - рецепт Но там в конце не понял и еще когда вызвать где вызвать тоже не понятно авторИ время от времени запускаем её в транзакции с TIL CONCURRENCY. Ни в коем случае не в READ COMMITTED!!! авторsession #2 -- вот при этом commit'e должно было бы сработать отложенное ограничение! -- но оно выполнилось ранее, при insert'e, когда сеанс_1 еще не закоммитил -- свои данные и их не было видно в сеансе_2 SQL> commit; session #1 SQL> select * from goods_amounts_agg; GOOD AMOUNT AMOUNT_TOTAL ============ ============ ===================== 1 100 -80 1 200 -80 1 -190 -80 1 -190 -80 Всё, приехали. :( Количество складов ограничено максимум 10 реально использует 3 точки + склад основной Есть 2 таблица Мастер и детайл остатки пока беру селектом но в будущем если база копится то селектом проблема будет с тормозами.. Пример таблица мастер Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Пример таблица детайл Код: sql 1. 2. 3. 4. 5. 6. 7.
Остатки беру так и показываю при расходе с каких коробок продаем и там сам выбирает Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Пока думаю создать еще одну таблицу Код: sql 1. 2. 3. 4. 5. 6. 7.
Потом селектом с этого таблиц брал. Но как обновить и контролироват? Особенно при перемещение то есть одного точка минисуется а другой плюсуется. Заранее благодарен.. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 09:40 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
RADSeatle, запрос не работоспособен. По крайней мере на Firebird. Нет в FB схем, а потому такие конструкции bnf.headdoc.from_store в принципе не возможны, если конечно bnf не пакет, headdoc его процедура, а from_store выходной параметр процедуры ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 15:37 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Симонов ДенисНет в FB схем А также типа VARCHAR2 о deferred constraints. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 17:40 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovо deferred constraints. оооооо! deferred constraints! p.s. скукотища. в смысле, что до НГ, что после. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 17:41 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 11 января 2016 г. 17:44:58: Kdv> p.s. скукотища. в смысле, что до НГ, что после.печень бережешь? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 17:44 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
kdvскукотища. в смысле, что до НГ, что после. А ты ожидал, что НГ автоматически приносит с собой смех и веселье?.. Впрочем, если ты, в отличии от меня, считаешь глупость забавной - читай firebird-support. Там ежедневный цирк с обезьянками. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 18:06 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Сейчас структуры выложу ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 18:16 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
RADSeatleСейчас структуры выложу Ни к чему: Оракул всё равно в соседнем разделе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 18:21 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Мимопроходящийпечень бережешь? моя печень окружающим пофиг, просто давно уже нет каких-то серьезных топиков. Школота разве что доставляет, и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 18:25 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
kdvпросто давно уже нет каких-то серьезных топиков. Что ты считаешь "серьёзным топиком"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 18:52 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 11 января 2016 г. 18:40:44: Kdv> моя печень окружающим пофиг, просто давно уже нет каких-то серьезных топиков. Школота разве что доставляет, и все. кризис жанра. программизЪм отмирает как атавистическое порождение избыточного интеллекта. на смену ему уже пришел тупой прогрессивный кодинг и мапинг. со всевозможными ORM-ами и фреймворками. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 18:52 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Господа ну что вы .. Вот примерный 2 таблиц. В реале будет Таблицы RefProducts RefCategory --Shoes Shirt etc RefMeasurement RefStores RefCustomers RefUsers RefActions --- Sale Return Purchase Correction HeaderDoc HeaderDetail Планирую 2 доп таблицу Table Saldo ProductID BoxNumber StoreID CurrentDate saldo_in, in_come, out_come, saldo_out Table Remain ProductID BoxNumber StoreID Qty.. Буду отсюда брать остатки Пока селектом беру но такой подход не нравиться мне Пока в день будет инсертится общий 500-1000 записи Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105.
Сам селект для показа остатка Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 22:03 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
kdv...просто давно уже нет каких-то серьезных топиков. Сгенерировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 09:12 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
DBConstructor, Серьёзный топик - это не когда рука тянется набить лицо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 10:28 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
WildSery, когда рука тянется набить лицо, это не "сюда", это к психоаналитику. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 10:49 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
kdv> просто давно уже нет каких-то серьезных топиков Смотря что ты называешь серьёзным. Таблоид вон стабильно почти каждую неделю выдаёт что-то. Игорь иногда тоже отжигает. Или тебе нетривиальные запросы нужны? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 11:35 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
DBConstructor, Не меняй тему. Генерировать серьёзные топики ты не приспособлен. А будешь мне диагноз ставить - он к тебе не раз ещё вернётся ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 13:19 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
RADSeatle, если ты делаешь это в оракле и тебе нужны только текущие остатки а не на дату, заведи поле в справочнике и заполняй его. Лучше в compound trigger-е суммой по всем измененным одним statement-ом записям. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 14:02 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
RADSeatleОстатки беру так и показываю при расходе с каких коробок продаем и там сам выбирает Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Вы соединяете 4 раза одни и те же таблицы (со странными для ФБ именами, ну да ладно), меняя только условие and bnf.headdoc.direction" = '...'. Соединение - очень дорогая операция (если не самая дорогая), старайтесь всегда уменьшить число обращений к ней. RADSeatleкак обновить и контролироват? Особенно при перемещение то есть одного точка минисуется а другой плюсуется. Заранее благодарен..Обновить остатки - просто (в процедуре, которая "пробегает" по журналу, делаете update or insert таблицы этих остатков, как показал в своём посте ДС). А вот контролировать их на неотрицательность - уже веселее. Вам придется лочить строку таблицы остатков при выполнении каждого расхода (а также отмены ранее созданного прихода), чтобы не давать двум транзакциям снять с полки больше, чем там имеется. Это при интенсивной работе с одним и тем же изделием неизбежно приведёт к большому числу лок-конфликтов. Есть один способ уменьшить частоту этих конфликтов (там сальдовая таблица вообще не лочится), но он весьма геморный в реализации и требует, чтобы все транзакции стартовали только с TIL = snapshot, т.е. никаких RC. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 14:22 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
ТаблоидА вот контролировать их на неотрицательность - уже веселее. Вам придется лочить строку таблицы остатков при выполнении каждого расхода (а также отмены ранее созданного прихода), чтобы не давать двум транзакциям снять с полки больше, чем там имеется. Это при интенсивной работе с одним и тем же изделием неизбежно приведёт к большому числу лок-конфликтов. Есть один способ уменьшить частоту этих конфликтов (там сальдовая таблица вообще не лочится), но он весьма геморный в реализации и требует, чтобы все транзакции стартовали только с TIL = snapshot, т.е. никаких RC. А почему нельзя наложить ограничение на хранимый агрегат "остаток" что-то типа VALUE>0? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 14:42 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Вот это правилный селект Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
Как лочит таблицу? Процедуру insert update delete вызваю режиме snapshot.. Пусткай в минус уходит потом сами корректирует check на минус нет у меня Пока этот мысл у меня не знаю правильно ли или нет Примерно все в одном транзакции Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Как то так Если есть лучший способ поделитесь Допустим у меня юзер сделал приход но галочку не поставил тоесть документ состояние (не проведен) Тогда тупа инсерт в мастер и детайл если что то забыл апдейтил мастера и детайла и поставил галочку на проведен То тогда апдейт мастер апдейт детайл и апдейт таблицу остатков потом если удалил документ или еще менял что то то опять надо уменшить или увеличет баланс ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 14:47 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
MikeDD, журнал движения (который далее надо будет обмолотить, чтобы схлопнуть остатки) заполняется _до_ всякого контроля на неотрицательность. Затолкали количество = 7 в расходный ("-1") документ по изделию номер 789654 - добавили в журнал запись "789654; -1; 7". То же самое сделала вторая транзакция. И не ведает, что там уже нет 7 штук на полке. Дальше документы "проводят" , а затем на сцену приходит процедурка, которая будет схлопывать остатки. Она, конечно, обломается на этом схлопывании из-за check>=0. Смекатете, что дальше надо будет ? ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 14:50 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
Таблоид, а про журнал то я и забыл. У меня его нету, таблица агрегатов заполняется при добавлении строки/проводке документов. Блокировки разруливаются на клиенте, да и нет их практически в аптеке. Кстати и у ТСа нет насущной необходимости в промежуточном журнале с его 1000 инсертами в день. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 15:00 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
MikeDDу ТСа нет насущной необходимости в промежуточном журнале с его 1000 инсертами в день.да, до меня тоже дошло, что ему надо просто лочить сальдовую табилицу в триггере :-) Фраза "Пусткай в минус уходит потом сами корректирует check на минус нет у меня" всё как-то сразу прояснила. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 15:14 |
|
Дайте пример как обновлять остатки через процедуру?
|
|||
---|---|---|---|
#18+
[quot RADSeatle]Вот это правилный селект Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
это ужас, а не селект. Вот это должно давать примерно тоже самое и работать быстрее. Но не проверял Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 15:24 |
|
|
start [/forum/topic.php?fid=40&msg=39145266&tid=1562401]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 261ms |
total: | 415ms |
0 / 0 |