|
|
|
Зависание вложенной процедуры
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть вопрос с вложенными процедурами. Процедура SP_RECALC_DIVIDENDS получает: IN_ID_KCARD код акционера, IN_ID_TRANCHE - транш IN_RECALC_DATE - дата пересчёта START_YEAR - год с которого считаем END_YEAR год по который пересчитываем RECALC_TEXT текст Процедура SP_CHARGE ID_KCARD - код акционера ID_TRANCHE - код транша ID_FILIAL - код филиала CHARGE_DATE - дата начисления IN_RECALC - признак того, что это перерасчёт, не ноль производит перерасчёт начисленных дивидендов. После того, как находит уже имеющиеся начисления она их копирует в перерасчёт (сохраняем старое состояние) и заново вызывает функцию начисления. В IbExpert пошагово выполняется пересчёт. Когда запускаю на выполнение с интерфейса или из того же ИБЕксперта - зависает. Отключаю вызов функции SP_CHARGE - всё нормально. Подскажите, может что-то очевидное с блокировкой таблиц? Код: plsql 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. и Код: plsql 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. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:49:56 |
|
||
|
Зависание вложенной процедуры
|
|||
|---|---|---|---|
|
#18+
БА! Да это мутирующая таблица! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 15:58:18 |
|
||
|
Зависание вложенной процедуры
|
|||
|---|---|---|---|
|
#18+
Открой уже для себя exists, а то глаз режет: SELECT COUNT(D.ID) FROM ...; if (VAR_CNT_OLD_RECORD > 0) then Ну про змею кусающую себя за хвост ты уже похоже догадался. Портянки кода убрал под спойлер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2013, 16:27:56 |
|
||
|
Зависание вложенной процедуры
|
|||
|---|---|---|---|
|
#18+
Ivan_Pisarevsky, с функцией exists знаком, она там в верхней строке применяется. В какой-то момент надо было знать количество записей. Так и осталось, видимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 07:41:36 |
|
||
|
Зависание вложенной процедуры
|
|||
|---|---|---|---|
|
#18+
Ещё вопрос, а что если вместо FOR SELECT использовать DECLARE CURSOR это не решит проблему? В курсоре выборка фиксированная на момент открытия или такое же грязное чтение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 07:50:35 |
|
||
|
Зависание вложенной процедуры
|
|||
|---|---|---|---|
|
#18+
DFilushinесли вместо FOR SELECT использовать DECLARE CURSOR это не решит проблему?Это суть одно и то же. Попробуй сделать order by "поле_без_индекса", чтоб стабилизировать курсор в буфере сортировки, обычно помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 11:29:14 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38400962&tid=1564325]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 365ms |

| 0 / 0 |
