Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PostgreSQL]Triggery - usuwanie z dwóch tabel na raz
krzyfn
post 9.06.2008, 06:55:13
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 22.10.2004

Ostrzeżenie: (0%)
-----


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.

Ten post edytował krzyfn 9.06.2008, 06:56:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
_olo_1984
post 9.06.2008, 07:23:27
Post #2





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

Ostrzeżenie: (0%)
-----


może raczej InnoDB i klucze obce ?

edit- a bo jakoś jeszcze tak tępo patrze po tym meczu - pozdrawiam i przepraszam smile.gif

Ten post edytował _olo_1984 9.06.2008, 07:30:03


--------------------
awake
Go to the top of the page
+Quote Post
dr_bonzo
post 9.06.2008, 07:23:47
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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.html

z tego co pisza masz dostep do OLD, rekordu ktory usuwasz, z ktorego pobierzesz sobie ID itd.


edit:
_olo_1984: to jest postgresql smile.gif

Ten post edytował dr_bonzo 9.06.2008, 07:24:22


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
krzyfn
post 9.06.2008, 12:17:42
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 22.10.2004

Ostrzeżenie: (0%)
-----


Ok, zrobiłem coś takiego i działa:

  1. CREATE OR REPLACE FUNCTION usun() returns TRIGGER AS '
  2. begin delete from opis where id_opis = old.id_opis;
  3. return old;
  4. end;'
  5. LANGUAGE plpgsql;
  6.  
  7. CREATE TRIGGER usun before DELETE ON harcerki FOR each row
  8. execute procedure usun();
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 10:41