procedurka pod postgresql
jarek - 11-05-2006 17:24
procedurka pod postgresql
Witam siedze dlubie ale jakiś mi nie wychodzi czy może ktoś mi pomoc napisać procedure pod postgres-a która w przypadku usuniecia kontrahenta z tabeli kontrahenci usunie z tabel dokumenty i dokumentypozycje wszystkie jego operacje oto table :
kontahenci idkontahenta nazwa
dokumenty idkontrahenci datta itp......
dokumentypozycje iddokumenty idprodukt itp....
pozdrawiam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Parasit Hendersson - 11-05-2006 17:24
Dnia Wed, 10 May 2006 12:15:54 +0200, jarek napisał(a):
> Witam > siedze dlubie ale jakiś mi nie wychodzi > czy może ktoś mi pomoc napisać procedure pod postgres-a > która w przypadku usuniecia kontrahenta z tabeli kontrahenci > usunie z tabel dokumenty i dokumentypozycje wszystkie jego operacje > oto table : > > kontahenci > idkontahenta > nazwa > > dokumenty > idkontrahenci > datta > itp...... > > dokumentypozycje > iddokumenty > idprodukt > itp....
Jakoś tak (pisze z pamieci):
<code> create or replace function kasuj (kotrahent int) ...blablabla
delete from dokumentypozycje where iddokumenty in (select iddokumentu from dokumenty where idkontrahenci = kontrahent) ; delete from dokumenty where idkonrahenci = kontrahent; delete from kontahenci where idkontrahenta = kontrahent; .... blabla </code>
Mozesz jeszcze sie pobawic sie z kursorami, ale to powinno dziala.
Jesli to jakies faktury, to pomysl jeszcze o stanach magazynowych itp.
Pozdrawiam Parasit Hendersson
Filip - 11-05-2006 17:24
jarek wrote: > Witam > siedze dlubie ale jakiś mi nie wychodzi > czy może ktoś mi pomoc napisać procedure pod postgres-a > która w przypadku usuniecia kontrahenta z tabeli kontrahenci > usunie z tabel dokumenty i dokumentypozycje wszystkie jego operacje
sorki że się wtrącam ale z doświadczenia wiem że nie jest to dobry pomysł. lepiej wyświetlić komunikat "kontrahent ma aktywne operacje" czy jakoś tak i zmusić użytkownika do ich wyczyszczenia. zwłaszcza jeżeli są to operacje finansowe.
jeśli chodzi o metodę - poza tym co już zostało powiedziane(czyli wykonywanie wszystkiego poprzez procedury składowane), można to załatwić a) kluczami obcymi z klauzulą ON DELETE ( po twojemu - on delete cascade, po mojemu - on delete restrict) b) triggerami; np w triggerze BEFORE DELETE zastosować taki kod jak podał kolega z wątku
> oto table : > > kontahenci > idkontahenta > nazwa > > dokumenty > idkontrahenci > datta > itp...... > > dokumentypozycje > iddokumenty > idprodukt > itp.... >
Adam - 11-05-2006 17:24
Parasit Hendersson napisał(a): > Dnia Wed, 10 May 2006 12:15:54 +0200, jarek napisał(a): > > >>Witam >>siedze dlubie ale jakiś mi nie wychodzi >>czy może ktoś mi pomoc napisać procedure pod postgres-a >>która w przypadku usuniecia kontrahenta z tabeli kontrahenci >>usunie z tabel dokumenty i dokumentypozycje wszystkie jego operacje >>oto table : >> >>kontahenci >>idkontahenta >>nazwa >> >>dokumenty >>idkontrahenci >>datta >>itp...... >> >>dokumentypozycje >>iddokumenty >>idprodukt >>itp.... > > > Jakoś tak (pisze z pamieci): > > <code> > create or replace function kasuj (kotrahent int) ...blablabla > > delete from dokumentypozycje where iddokumenty in (select iddokumentu from > dokumenty where idkontrahenci = kontrahent) ; > delete from dokumenty where idkonrahenci = kontrahent; > delete from kontahenci where idkontrahenta = kontrahent; > ... blabla > </code> > > Mozesz jeszcze sie pobawic sie z kursorami, ale to powinno dziala. > > Jesli to jakies faktury, to pomysl jeszcze o stanach magazynowych itp. > > Pozdrawiam > Parasit Hendersson
Jeżeli założysz referencję na te tabele w efekcie otrzymasz to samo bez procedury.
Pozdrawiam.
Q - 11-05-2006 17:25
> siedze dlubie ale jakiś mi nie wychodzi > czy może ktoś mi pomoc napisać procedure pod postgres-a > która w przypadku usuniecia kontrahenta z tabeli kontrahenci > usunie z tabel dokumenty i dokumentypozycje wszystkie jego operacje
trigger'em?
Grzegorz Szyszlo - 11-05-2006 17:25
Adam wrote:
> Jeżeli założysz referencję na te tabele w efekcie otrzymasz to samo bez > procedury.
ale musi to byc referencja z opcja on delete cascade . bo normalnie, to bez usuniecia danych z tabel opcych, usuniecie kontrachenta jest zablokowane.
znik.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.plfelgiuzywane.xlx.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 |
|