|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Всем Привет. Задумал я написать крутой лог изменений полей в таблицах, хочу чтобы в лог файл записывались только те поля, которые изменились. Много всего прочитал, но немогу понять, как можно динамически сравнивать поля таблицы переменних NEW. и OLD. в тригере. пробивал через execute statment , так там только select, а мне надо if .. then ... else. Привожу кусок неработаещего тригера. CREATE OR ALTER TRIGGER RS_WORK_AI0 FOR RS_WORK ACTIVE AFTER INSERT POSITION 1 AS declare variable Sql_txt varchar(500); declare variable Old_field_name varchar(31); declare variable new_field_name varchar(31); declare variable Current_Field_Name varchar(31); declare variable Changed boolean; begin /* Trigger text */ for select rdb$field_name from rdb$relation_fields where rdb$relation_name = 'RS_WORK' into :Current_Field_Name do begin if (new.$field_name <>old.$field_name) then (Пробывал подставлять в execute statment - IF неработает) end end; Также нашёл вот такой пример , но там тоже IF THEN и тоже незнаю как дальше поступать. Заранее благодарен за помощь. [i] for select ' if (new.' || rdb$field_name || ' is null and old.' || rdb$field_name || ' is not null or new.' || rdb$field_name || ' is not null and old.' || rdb$field_name || ' is null or new.' || rdb$field_name || ' <> old.' || rdb$field_name || ') then ' from rdb$relation_fields where rdb$relation_name = 'RS_WORK' into :if_txt do begin execute statment :if_txt'; /* Где-то так, но неработает end end ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:27 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
имхо, тут программист нужен. © Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:29 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Так вроде тут форум программистов )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:32 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Taraskrezнемогу понять, как можно динамически сравнивать поля таблицы Никак, обломись. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:34 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
А может можно переменные NEW и OLD значение select-ом вибрать, типа так select myOld, myNew from New,Old ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:35 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
27.05.2021 15:35, Taraskrez пишет: > А может можно переменные NEW и OLD значение select-ом вибрать, типа так > select myOld, myNew from New,Old ..... нет. тебе поможет MS SQL. там это есть. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 15:42 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Taraskrez, Не получиться сделать т.к. текст PSQL переводится в BRL. Имена должны быть известны. Как-то так... Можно написать хранимую процедуру создающие/изменяющие триггеры с нужной Вам логикой и вызвать эту процедуру при изменения метаданных таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 16:07 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
При желании можно сделать все что угодно. Завернуть execute bkock в execute statement например. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Другой вопрос - что у ТС топик посвящен глотанию шаров и натягиванию совы на глобус. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 16:20 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
DarkMaster, Не надо цель и средства путать. Цель конкретная и достижимая, а вот путь которым пошел ТС ошибочный, поэтому он этот пост и написал. Зачем за это его гнобить? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 16:48 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Taraskrez, а на какое событие Вы хотите триггер повесить? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 17:16 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Taraskrez А может можно переменные NEW и OLD значение select-ом вибрать, типа так select myOld, myNew from New,Old ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 17:41 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, А оно точно нужно - логирование всего и вся? Возможно хватит 2х-3х рукописных триггеров на ключевых таблицах? А так-то да - нагенерить можно. Только при изменении метаданных нужно будет перетряхивать все это хозяйство. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 17:46 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
инструкции и примери запросов к системним таблицам я знаю и делаю, кстати в моем примере так и есть, но неполучается, а вот запихнуть execute block в execute statemen непробивал Вечером попробцю. Бланодарен за поиощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 20:52 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
DarkMaster А оно точно нужно - логирование всего и вся? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 09:17 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
DarkMaster Только при изменении метаданных нужно будет перетряхивать все это хозяйство. DarkMaster рукописных триггеров ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 10:44 |
|
Динамическое сравнение полей таблицы в тригере
|
|||
---|---|---|---|
#18+
Taraskrez а вот запихнуть execute block в execute statemen ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 10:48 |
|
|
start [/forum/topic.php?fid=40&msg=40073747&tid=1560027]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 246ms |
total: | 404ms |
0 / 0 |