ďťż
 
Trigger ... pytanie do prawdziwych wyjadaczy ďťż
 
Trigger ... pytanie do prawdziwych wyjadaczy
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com