|
|
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Возникла необходимость протоколирования изменений в таблице примерно такого вида: Код: sql 1. 2. 3. 4. 5. Особенность ситуации в том, что строки зависимы друг от друга и при внесении изменений в одну из них, пересчитываются некоторые другие. Кроме того, изменения в одни и те же поля могут вноситься в течение одной транзакции несколько раз с целью подбора оптимальных значений всего набора (своеобразный excel-style). Первоначально протокол велся аналогично модели IBExpert с мелкими поправками на особенности. Нужно обеспечить ведение протокола таким образом, чтобы вместо трех записей в протоколе вида: Код: sql 1. 2. 3. фигурировала одна строка Код: sql 1. Т.е. протоколирование построчных изменений не вариант. Возникла идея в триггере AIU первых изменений в транзакции инициализировать специальную контекстную переменную в пространстве имен транзакции и при последующих изменениях просто перезаписывать новые значения полей. Покритикуйте, плиз, подход. Ну, или иные варианты предложите :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 17:27:13 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Kirill RazuvaevНужно обеспечить ведение протокола таким образом, чтобы вместо трех записей в протоколе вида: фигурировала одна строка Замени в триггере INSERT на MERGE. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 17:37:46 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЗамени в триггере INSERT на MERGEНе очень понял, чем поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 22:33:05 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Kirill RazuvaevНе очень понял, чем поможет... Всем. Будет тебе нужный результат. Только в ветке match не меняй старое значение поля. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 22:44:04 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, MERGE в привязке к номеру транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 23:02:22 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Kirill RazuvaevMERGE в привязке к номеру транзакции? В привязке к номеру записи, изменения в которой ты протоколируешь. Ну, или, если MERGE для тебя слишком сложно, можешь использовать классический код: Код: sql 1. 2. 3. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 23:15:30 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, да здесь не в синтаксисе MERGE дело, я пока концептуально не все разложил. Завтра попробую предполагаемый вариант выложить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 23:32:48 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Kirill Razuvaevда здесь не в синтаксисе MERGE дело, я пока концептуально не все разложил. Ты хочешь несколько последовательных записей сложить в одну. Это делается оператором UPDATE. По первому изменению в таблице А запись в лог добавляешь, по последующим - уже добавленную в лог запись обновляешь. Не, конечно, ты можешь и с переменными побаловаться, я ж не настаиваю... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 23:43:06 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПо первому изменению в таблице А запись в лог добавляешь, по последующим - уже добавленную в лог запись обновляешь. Да, но есть нюанс - нужно отличить изменения, сделанные пять минут назад (утром, вчера) от изменений в текущей транзакции. Вот и получается, что нужно точно идентифицировать изменения текущей транзакции. Вариантов вижу два: - либо привязываться (matching) к current_transaction, что не тянет на первичный ключ таблицы по понятным причинам, и, следовательно не слишком эффективно для update - либо при первом изменении в транзакции инициализировать генератором контекстную переменную, получая и ID, и PK. А при повторных - просто перезаписывать новые значения полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 10:14:14 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Kirill Razuvaev, использовать в качетве [части] первичного ключа идентификатор транзакции + 14909651 - почему нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 11:33:16 |
|
||
|
Обобщенный протокол изменений
|
|||
|---|---|---|---|
|
#18+
Kirill Razuvaevесть нюанс - нужно отличить изменения, сделанные пять минут назад (утром, вчера) от изменений в текущей транзакции. Веди протокол во временной таблице, а по коммиту сбрасывай её в основную. Всяк меньше геморроя чем с переменными. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 12:04:04 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38414021&tid=1564277]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
203ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 506ms |

| 0 / 0 |
