Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Рекурсивный вызов триггера
|
|||
|---|---|---|---|
|
#18+
Привет, народ! Я написал триггер на таблицу, одно из полей которой - порядковый номер для сортировки. Его идея состоит в том, чтобы подправлять эти порядковые номера. К примеру если я ставлю какую-то запись в середину списка, порядковые номера остальных записей нужно сдвинуть таким образом, чтобы они шли по порядку. Вот мой триггер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Очевидно, что если будет вызван UPDATE внутри триггера на эту же таблицу, то триггер пойдет по рекурсии. Как этого избежать? Могу ли я к примеру каким-то образом узнать уровень вложенности текущего вызова триггера, чтобы сразу же из него выйти, когда этот уровень больше чем "1"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2004, 18:51 |
|
||
|
Рекурсивный вызов триггера
|
|||
|---|---|---|---|
|
#18+
Наверное нет такой функции. В pl/perl или pl/python сохраняется состояние глобальных переменных между вызовами функций в рамках сессии, можно воспользоваться этим (не для написания логики триггера - это IMHO часто проще делать в pl/pgsql, а только для хранения переменных). Допустим вот так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 04:30 |
|
||
|
Рекурсивный вызов триггера
|
|||
|---|---|---|---|
|
#18+
Избежать каскада можно, если: 1. Триггер в записи будет проверять некое условие. (например дополнительное буленово поле todo bool DEFAULT TRUE, или иной признак состояния). 2. Перед UPDATE для всех остальных записей перевести их в требуемое состояние "отключения обработки" Идея такова: для BEFORE UPDATE (возможно и не сработает - надо проверить) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Вот потестировал: К сожалению Бефоре не прошло (у меня) а вот с Афтер: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 14:47 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2007576]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 351ms |

| 0 / 0 |
