Firebird triggers

5 отговора 127 прегледа
#1

Firebird triggers

Може и въпроса да не е свързан пряко с тази група, но ще съм благодарен ако някой може да помогне по някакъв начин. Става въпрос за Firebird / Interbase, искам да направя тригер на update, в който да изкарам само променените полета от записа, който се редактира. Дали е възможно да стане без да проверявам всички полета едно по едно (if new.fieldname <> old.fieldname...).

Отговор
в отговор на CTan #2

Re: Firebird triggers

Нещо не мога да разбера какво разбираш под "да изкарам". Къде ще ги изкарваш?

Отговор
в отговор на NDeu #3

Re: Firebird triggers

Разбирай го по един от двата начина:
1. към "да изкарам" добави: "и запиша в друга таблица имената на полетата"
или
2. "да изкарам" замени с: "да разбера и да променя само тях".

Отговор
в отговор на CTan #4

Re: Firebird triggers

Не става ;-))) - това трябва да го направиш на ниво заявка към базата данни - примерно ако имаш 5 компонента - примерно 4исла - и промениш само един - да не пускаш всички полета -за update.
Единственото което ми хрумва е да правиш сравнение - Old_value = New_value - ама това е малко кофти защото се предава и обновяват всички полета, но ако ти трябва да следиш кои полета са обновени би станало. Виж не знам как би могъл да напишеш един универсален тригер за вси4ки таблици - виж това ме интересува за да си направя репликацията ;-)))

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #5

Re: Firebird triggers

:) И на мен ми трябва за репликация. Общо взето съм я направил (и работи :)), но не е това, което искам. Данните се синхронизират на ниво запис, което в началото вършеше работа. Проблема е, че базата е доста голяма като таблици и полета в тях, а и структурата се променя доста често , така че не ми се иска да поддържам хамалски тригери за всяка тблица. В firebird 1.5 вече има "универсални" тригери, но за една таблица, например един тригер за insert, update и delete едновременно, но не върши работа в този случай :(

Отговор
в отговор на CTan #6

Re: Firebird triggers

Ами ако успееш да направиш 3 универсални тригера (по един за всяко действие) - това е добре - лошото е ако се наложи да ползваш допълнителни такива - за някоя таблица което често се случва ;-)
Като казах универсален тригер имах предвид такъв който може да се използва независимо от таблицата и полетата които тя съдържа, а не такъв който може да се ползва при 3-те действия.
---
Е т'ва е живот!

Редактирано от PhantomAS на

Отговор