Trigger czyli wyzwalacz. Tak, jest coś takiego, to już
rozszerzenie SQL. Występuje na pewno na MS SQL Serwerze oraz na bazach ORACLE.
Ponieważ opisuję triki, które sam stosowałem, to w zakresie rozszerzenia SQL
szału nie ma, ale jakieś triggery stosowałem…
Zatem sytuacja wygląda następująco: co roku zbieramy dane o
przychodzie i dochodzie klienta. Jest wypełniany formularz w EXCEL i
przekazywanych do centrali. Wymyśliliśmy
to tak, że każdy z formularzy miał wbudowaną formułę konstruującą odpowiednie
polecenie INSERT…, którego wykonanie powodowało dopisanie danych do bazy. To,
że tak powiem była pierwsza generacja, w kolejnej już mieliśmy postawioną
osobna bazę i podpięty formularz internetowy do wprowadzania danych.
I powstało pytanie, czy nie zapiszemy danych, które już
mamy, za rok który już mamy.
Projektowanie komunikacji w dwie strony dla wpisującej osoby nie
wchodziło w grę, to kosztowne i wymagające zachodu podejście, po prostu bez
sensu, jak na realizowany cel: bieranie danych.
No to zapisywaliśmy jak leci, co tylko do nas dotarło, do tabeli na
bazie: KLIENT_WYNIKI.
Na tej tabelce został zbudowany, założony trigger, tu
nazywam go: DODAJ_DATE_ZAPISU. Trigger
uruchamia się po każdym insercie do tabelki KLIENT_WYNIKI.
Trigger powoduje, iż do drugiej tabelki o nazwie
KLIENT_WYNIKI_TOTAL wykonuje się insert/załadowanie danych tych samych co zainsertowanych
ostatnio do KLIENT_WYNIKI, cały wiersz w całości insertowany plus uzupełniana jest dodatkowa kolumna zawierające
informację o dacie i czasie ładowania, tu wykorzystywana jest GETDATE().
Przyjmujemy teraz, że dane załadowane najmłodsze są najlepsze, dlatego widok, który używamy do celów raportowych wybiera dla
każdego klienta ostatnio ładowane dane.
To tak z grubsza, oczywiście pominąłem tu kilka wątków, np.
jak rodzaje źródeł danych etc. To nie jest istotne dla pokazania idei działania
triggera jednak, za dużo by tego było.
Pewno i by obyło się bez dwóch tabel, jedna by wystarczyła,
można nie insert, można update. To jak kto lubi, jak wymyśli, dostosuje do
swoich potrzeb.