Trigger ... pytanie do prawdziwych wyjadaczy
Tdobe - 13-11-2006 00:47
Trigger ... pytanie do prawdziwych wyjadaczy
WItam,
Mam sobie tabelke PREZYDENCI(PREZYDENT_ID integer (PK) ,Nazwisk varchar,Imie Varchar, srednie_poparcie double precision, flaga_historii integer, prezydent_ref_id integer) :D
i do tego dwa triggery:
1. TR_PREZYDENCI_AUTO_INC before insert on table PREZYDENCI begin new.PREZYDENT_ID = gen_id(prezydenci_gen,1); end
2. TR_PREZYDENCI_HISTORIA before update begin insert into PREZYDENCI select * from prezydenci where (prezydent_id = old.prezydent_id); new.prezydent_def_id = gen_id(prezydencji_gen,0); end
ten pierwszy trigger wiadomo co, wstawia nastepny klucz klowny ten drugi zadziala w przypadku jakiegokolwiek updatu, wykona kopie rekordu do tej samej tablicy i ustawi referejcje do poprzednich wartosci;
Problem: chcialbym w momencie drugiego triggera ustawiac od razu przy insercie ustawiac flage_histrii na 1
rozwiazanie niechciane:
insert into PREZYDENCI((PREZYDENT_ID,Nazwisk,Imie, srednie_poparcie, flaga_historii,prezydent_ref_id) select (gen_id(prezydenci_gen,1),nazwisko,imie,sredni_pop arcie,1,prezydent_ref_id) from prezydenci where (prezydent_id = old.prezydent_id);
rozwiazanie porzadane:
zeby trigger pierwszy (before insert) wiedzial ze nowy rekord jest wstawiany jako zwykla nowa pozycja wtedy ustawi flage hist na 0 a jest rekord jest dokladany przez triggera 2 ustawiaj flage historii na 1;
dlaczego?
bo nie chce podawac przy kazdym takim triggerze listy pol, szczegolnie ze one sie moga zmieniac...
ma ktos pomysl skad jeden trigger ma wiedziec ze dane sa wprowadzane przez inny trigger a moze jest inne rozwiazanie,
satysfakcjonowalo by mnie: insert into PREZYDENCI (flaga_historii,*) select (1,*) from prezydenci where (prezydent_id = old.prezydent_id);
ale tak sie nie da...
Marcin - 13-11-2006 00:47
Tdobe wrote: > WItam, > > Mam sobie tabelke PREZYDENCI(PREZYDENT_ID integer (PK) ,Nazwisk > varchar,Imie Varchar, srednie_poparcie double precision, flaga_historii > integer, prezydent_ref_id integer) :D > > i do tego dwa triggery: > > 1. TR_PREZYDENCI_AUTO_INC before insert on table PREZYDENCI > begin > new.PREZYDENT_ID = gen_id(prezydenci_gen,1); > end > > 2. TR_PREZYDENCI_HISTORIA before update > begin > insert into PREZYDENCI select * from prezydenci where (prezydent_id > = old.prezydent_id); > new.prezydent_def_id = gen_id(prezydencji_gen,0); > end
1. TR_PREZYDENCI_AUTO_INC before insert on table PREZYDENCI DECLARE VARIABLE ile INTEGER; begin SELECT COUNT(*) FROM prezydenci WHERE prezydent_id = NEW.prezydent_id INTO :ile; IF (ile > 0) THEN new.flaga_historii = 1; new.PREZYDENT_ID = gen_id(prezydenci_gen,1); end
2. TR_PREZYDENCI_HISTORIA before update begin insert into PREZYDENCI select * from prezydenci where (prezydent_id = old.prezydent_id); new.prezydent_def_id = gen_id(prezydencji_gen,0); -- chociaż tutaj nie jestem pewien czy gen_id da to samo, -- co przy ostatnim insercie, chyba nie zawsze... end
M.
Tdobe - 13-11-2006 00:47
nie za bardzo kumam tego:
SELECT COUNT(*) FROM prezydenci WHERE prezydent_id = NEW.prezydent_id
przeciez w tym momencie jeszcze nie mamy nic w NEW.prezydent id bo jest to przypisywane dwie linie nizej
Tdobe - 13-11-2006 00:47
A... cwany jestes juz kumam, dostanie takie jak juz jest.... i wtedy jest info ze to kopia...:D
Tdobe - 13-11-2006 00:47
A co do tego nowego id... co masz niepewnosc... hmm... moze roznie byc... ale narazie nic lepszego nie wymyslilem...
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[OT?] Monitory dla =?ISO-8859-2?Q?grafik=F3w_-_pytanie_o_?==?ISO-8859-2?Q?przej=B6ci=F3wki?=
=?ISO-8859-2?Q?kr=F3tkie_pytanie_-_gdzie_forum_grafik=F3?==?ISO-8859-2?Q?w_=28Corel_Painter=29_=3F?=
Pytanie -Papier Nalepka - =?ISO-8859-2?Q?p=B3ytka_w_kszta=B3?==?ISO-8859-2?Q?cie_wizyt=F3wki?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Pytanie o =?ISO-8859-2?Q?kas=EA=2E=2E=2E?=
pytanie o zapytanie z having count = count z innej kolumny
=?iso-8859-2?q?Kr=F3tkie_pytanie_-_PostgreSQL_8=2E2=2E2_i_CREATE_ASSERTION?=
=?iso-8859-2?q?Pytanie_SQL__spe=B3niaj=B1ce_wiecej_jak_jeden_ warunek_na_jednej_kolumnie=2E?=
CA nr 1/2007 - pytanie do tych co =?ISO-8859-2?Q?maj=B1?= ten numer
Re: MS SQL 2000 - Wadliwy optymalizator? (dlugie pytanie...)
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|