krzyfn
9.06.2008, 06:55:13
Witam, chciałbym napisać funkcję + trigger które to będą odpowiedzielne za usuwanie wpisów z dwóch tabel na raz. Jedna tabela zawiera spis ludności (imię, nazwisko ... ), a druga zawiera opis do każdego z nich. Połączone są wspólnym id.
Chciałbym teraz napisać coś takiego, że w momencie kiedy usuwam kogoś z tabeli ludności, to automatycznie zostanie usunięty opis.
Problem tkwi w tym, że funkcje typu 'trigger' z założenia nie mogą posiadać argumentów - a w moim przypadku konieczne jest przesłanie id_czlowiek do funkcji, żeby został usunięty odpowiedni człowiek z odpowiadającym mu opisem.
Czytałem na różnych forach, że z tym brakiem argumentów, to tylko w teorii - a praktycznie można to jakoś obejść (tablica argumentów ?)
Uprzedzę sugestie połączenia dwóch tabel w jedną - jest to zaliczenie i muszą być spełnione różne kryteria.
Pozdrawiam.
_olo_1984
9.06.2008, 07:23:27
może raczej InnoDB i klucze obce ?
edit- a bo jakoś jeszcze tak tępo patrze po tym meczu - pozdrawiam i przepraszam
dr_bonzo
9.06.2008, 07:23:47
A nie mozesz skorzystac z kluczy obcych, ON DELETE CASCADE ?
Cytat
Problem tkwi w tym, że funkcje typu 'trigger' z założenia nie mogą posiadać argumentów - a w moim przypadku konieczne jest przesłanie id_czlowiek do funkcji, żeby został usunięty odpowiedni człowiek z odpowiadającym mu opisem.
http://www.postgresql.org/docs/8.0/interactive/triggers.htmlz tego co pisza masz dostep do OLD, rekordu ktory usuwasz, z ktorego pobierzesz sobie ID itd.
edit:
_olo_1984: to jest postgresql
krzyfn
9.06.2008, 12:17:42
Ok, zrobiłem coś takiego i działa:
CREATE OR REPLACE FUNCTION usun() returns TRIGGER AS '
begin delete from opis where id_opis = old.id_opis;
return old;
end;'
LANGUAGE plpgsql;
CREATE TRIGGER usun before DELETE ON harcerki FOR each row
execute procedure usun();