|
|
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Нужно написать триггеры, на update которые фиксировали бы в каких полях произошли изменения. Например есть таблица Clients в ней поля name, phone, address, e-mail,... изменения произошли в двух полях name, phone. Нужно, что в триггере в итоге сформировалась строка типа ch_str = 'name, phone'; Самый простой вариант это: ch_str = ''; if (old.name <> new.name) then ch_str = ch_str || ', name'; if (old.phone <> new.phone) then ch_str = ch_str || ', phone'; но мне нужно поля динамически получать, это можно сделать таким запросом: select trim(rdb$field_name) from rdb$relation_fields where rdb$relation_name = 'CLIENTS' into :f_name Вся проблема в том, что не знаю как получить значения new.f_name и old.f_name. Подскажите, возможно ли такое сделать, если да то как или где поискать, может еще какой-нибудь способ есть решить данную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 07:27:52 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgine, Единственное что вижу - генерировать код триггера при изменении структуры таблицы. Однако, автоматически вызывать такую генерацию (и компиляцию) неоткуда, только ручками не забывать вызывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 08:05:44 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Понятно, что в ручную можно, но хотелось бы универсальности. Таблиц около 500 и для каждой делать триггер долго, да и большая вероятность, что кто-нибудь добавит новое поле, а триггер не подредактирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 09:12:41 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgine, Напиши обработку в IBExpert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 09:15:52 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Наверняка можно как-нибудь через execute statement+execute block извратиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 09:22:06 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
ExterisНаверняка можно как-нибудь через execute statement+execute block извратиться. ага. в триггере на подключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 09:27:07 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgine, Брось эту затею, в смысле получать поля динамически ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 09:32:00 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
CyberMaxlamborgine, Напиши обработку в IBExpert. Можно по подробней.. ExterisНаверняка можно как-нибудь через execute statement+execute block извратиться. Пробовал, не получилось. Если есть идеи как, напиши. ExterisБрось эту затею, в смысле получать поля динамически. Если не нужно было, не начинал =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 10:11:52 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Что ты потом будешь с этим списком полей делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 11:24:13 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgine ExterisНаверняка можно как-нибудь через execute statement+execute block извратиться. Пробовал, не получилось. Если есть идеи как, напиши. Печка , от которой можно начинать плясать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 11:27:22 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
ExterisЧто ты потом будешь с этим списком полей делать? Мне это нужно для логов работы с таблицами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 11:53:55 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. правильней Код: plsql 1. а то изменения NULL -> value и value -> NULL пропустишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 12:00:56 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Как вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Надеюсь массовых изменений не планируется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 12:03:16 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
И да, лучше is distinct. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 12:04:13 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Код: plsql 1. правильней Код: plsql 1. а то изменения NULL -> value и value -> NULL пропустишь Спасибо, учту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 12:05:19 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
ExterisНадеюсь массовых изменений не планируется? Массовых нет, но периодические да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 12:07:43 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgineПонятно, что в ручную можно, но хотелось бы универсальности. Таблиц около 500 и для каждой делать триггер долгоТы не понял слово "генерировать"? Это значит "формировать программно". 2 Exteris Попробовал, не работает. Да и понятно - откуда sql-ю знать переменную из psql? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. И Column does not belong to referenced table. Dynamic SQL Error. SQL error code = -206. Column unknown. NEW.ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 13:01:06 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Гхостик2 Exteris Попробовал, не работает. Да и понятно - откуда sql-ю знать переменную из psql? Точно же.( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 13:29:17 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgineМассовых нет, но периодические да. Переходи на тройку, там есть DDL триггера, сможешь генерировать новый текст триггера при изменении структуры таблицы автоматически. Или просто проверяй в триггере число полей таблицы и если больше ожидаемого - выкидывай исключение, чтобы тот, кто таблицу расширил, а про протоколирование забыл, исправил свою ошибку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 13:51:10 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov По ходу так и придется делать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 14:00:38 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Ну или можешь контролировать скрипт изменения БД каждого балбеса перед применением. Забыть добавить поле в триггер - не самая худшая ошибка, которую они могут допустить... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 14:05:49 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgineПо ходу так и придется делать..На продакшен пока рановато тройку ставить. Создайте на его копии табличку Код: sql 1. где NNNN - максимально длинное поле из ваших варчаров. В примере ниже NNNN = 2048. С блобами, конечно, проблема: там и 2 Гб может встретиться, поэтому их надо записывать в свою пару полей (old_ & new_blob). Далее натравите на вашу базу вот этот запрос: Код: 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. Например, для таблиц: Код: sql 1. 2. - будет вот это: Код: 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. Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 15:22:55 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
lamborgine, Автоматическое (пере)создания триггеров журналирования обновлений Код: 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. Пример созданного триггера Код: 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. NB: 0. Никаких гарантий не даю - отладка на совести использующего. 1. В тексте шаблона необходимо добавить код, который делает что-нибудь полезное со полученной строкой. 2. Ну, и не забывать запускать после каждого изменения набора полей таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 15:37:28 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
Таблоид, От блин, опередил с комбайном. Да ещё движок помощнее моего будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 15:42:45 |
|
||
|
Поиск измененных полей при обновлении строки в триггере
|
|||
|---|---|---|---|
|
#18+
dennis-rДа ещё движок помощнее моего будет. там надо бы допилить определение NNNN - максимального размера для варчаров. Ибо запихивать в varchar(32760) строки, если их длина никогда не превосходит 80, не только "нет смысла", а вообще - плохо. Скажется затем на выборках из этого аудита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 16:05:22 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38571742&tid=1563853]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 338ms |

| 0 / 0 |
