PostgreSQL - prosty wyzwalacz
Adam W. - 08-02-2006 17:23
PostgreSQL - prosty wyzwalacz
Witam! Mam pewien problem. Otóż chcę napisać prosty trigger, który po wpisaniu imienia i nazwiska i dodaniu go do bazy wstawi mi w trzecie pole, login w postaci pierwszej litery imienia i pieciu kolejnych nazwiska. Napisałem coś takiego:
CREATE OR REPLACE FUNCTION student_insert() RETURNS "trigger" AS ' BEGIN UPDATE student SET std_login = (SELECT substring(lower(std_imie) from 1 for 1)||substring(lower(std_nazwisko) from 1 for 5) as std_login FROM student WHERE std_id = (SELECT currval("'student_id'") FROM student)); END; ' LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER student_std_login_triggers AFTER INSERT ON student FOR EACH ROW EXECUTE PROCEDURE student_insert();
Niestety przy próbie dopisania osoby. Zwracany jest bład, który mówi, że w wyniku zapytania zostało zwróconych klika rekordów.
Bedę wdzięczny za wskazówki.
Pozdrawiam Adam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Piotr 'piter' Hlawski - 08-02-2006 17:23
Adam W. wrote:
> Witam! > Mam pewien problem. > Otóż chcę napisać prosty trigger, który po wpisaniu imienia i nazwiska i > dodaniu go do bazy wstawi mi w trzecie pole, login w postaci pierwszej > litery imienia i pieciu kolejnych nazwiska. > Napisałem coś takiego: > > CREATE OR REPLACE FUNCTION student_insert() RETURNS "trigger" AS > ' > BEGIN > UPDATE student SET std_login = (SELECT substring(lower(std_imie) from > 1 for 1)||substring(lower(std_nazwisko) from 1 for 5) as std_login FROM > student WHERE std_id = (SELECT currval("'student_id'") FROM student)); > END; > ' > LANGUAGE 'plpgsql' VOLATILE > > CREATE TRIGGER student_std_login_triggers > AFTER INSERT ON student > FOR EACH ROW > EXECUTE PROCEDURE student_insert(); > > Niestety przy próbie dopisania osoby. > Zwracany jest bład, który mówi, że w wyniku zapytania zostało zwróconych > klika rekordów.
UPDATE student SET std_login = ..... WHERE std_id = NEW.std_id
RETURN NEW;
-- ..:: Piter // phlawski@cut_this_crap.gmail.com // gg: 4534287 ::. Łzy Chucka Norrisa leczą raka. Ale jest tak hardkorowy, że nigdy nie zapłakał.
Adam W. - 08-02-2006 17:23
> UPDATE student SET std_login = ..... WHERE std_id = NEW.std_id > > RETURN NEW; > > -- > .:: Piter // phlawski@cut_this_crap.gmail.com // gg: 4534287 ::. > Łzy Chucka Norrisa leczą raka. Ale jest tak hardkorowy, że nigdy nie > zapłakał. > Wszystko jest ok. Działa, ale niestety zamiast aktualizować bieżacy rekord, robi to na całej bazie.
Pozdrawiam Adam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Piotr 'piter' Hlawski - 08-02-2006 17:23
Adam W. wrote:
>> UPDATE student SET std_login = ..... WHERE std_id = NEW.std_id >> >> RETURN NEW; >> >> -- >> .:: Piter // phlawski@cut_this_crap.gmail.com // gg: 4534287 ::. >> Łzy Chucka Norrisa leczą raka. Ale jest tak hardkorowy, że nigdy nie >> zapłakał. >> > Wszystko jest ok. Działa, ale niestety zamiast aktualizować bieżacy > rekord, robi to na całej bazie. >
Bo oczywiście "std_login = ....." powinieneś zamienić na "std_login = te_wycinanki(NEW.std_imie) i inne_wycinanki(NEW.std_nazwisko)"
Poczytaj sekcję o triggerach w pl/pgsql w dokumentacji - tam napisano co to jest m.in. NEW
-- ..:: Piter // phlawski@cut_this_crap.gmail.com // gg: 4534287 ::. Chuck Norris złamał własną nogę, żeby móc wygrać w paraolimpiadzie.
hubert lubaczewski - 08-02-2006 17:23
Adam W. wrote:
> Witam! > Mam pewien problem. > Otóż chcę napisać prosty trigger, który po wpisaniu imienia i nazwiska i > dodaniu go do bazy wstawi mi w trzecie pole, login w postaci pierwszej > litery imienia i pieciu kolejnych nazwiska. > Napisałem coś takiego: > > CREATE OR REPLACE FUNCTION student_insert() RETURNS "trigger" AS > ' > BEGIN > UPDATE student SET std_login = (SELECT substring(lower(std_imie) from > 1 for 1)||substring(lower(std_nazwisko) from 1 for 5) as std_login FROM > student WHERE std_id = (SELECT currval("'student_id'") FROM student)); > END; > ' > LANGUAGE 'plpgsql' VOLATILE > CREATE TRIGGER student_std_login_triggers > AFTER INSERT ON student > FOR EACH ROW > EXECUTE PROCEDURE student_insert();
aaaaaaaaaaaargh. 1. nie AFTER tylko BEFORE. 2. w treści funkcji daj po prostu NEW.std_login = substring(lower(NEW.std_imie) from 1 for 1)| substring(lower(NEW.std_nazwisko) from 1 for 5); return NEW;
i już
depesz
-- *------------------------------------------------------------------* najwspanialszą rzeczą jaką dało nam nowoczesne społeczeństwo, jest niesamowita wręcz łatwość unikania kontaktów z nim
adamczyk05@poczta.onet.pl - 08-02-2006 17:23
> aaaaaaaaaaaargh. > 1. nie AFTER tylko BEFORE. > 2. w treści funkcji daj po prostu NEW.std_login = > substring(lower(NEW.std_imie) from 1 for 1)| > substring(lower(NEW.std_nazwisko) from 1 for 5); return NEW; > > i już > > depesz > > -- > *------------------------------------------------------------------* > najwspanialszą rzeczą jaką dało nam nowoczesne społeczeństwo, jest > * * * * * * * * niesamowita wręcz łatwość unikania kontaktów z nim > Dzięki za pomoc. Doznałem oświecenia. Poczytam jeszcze dokumentację.
Pozdrawiam Adam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
adamczyk05WYTNIJTO@poczta.onet.pl - 08-02-2006 17:23
> aaaaaaaaaaaargh. > 1. nie AFTER tylko BEFORE. > 2. w treści funkcji daj po prostu NEW.std_login = > substring(lower(NEW.std_imie) from 1 for 1)| > substring(lower(NEW.std_nazwisko) from 1 for 5); return NEW; > > i już > > depesz > > -- > *------------------------------------------------------------------* > najwspanialszą rzeczą jaką dało nam nowoczesne społeczeństwo, jest > * * * * * * * * niesamowita wręcz łatwość unikania kontaktów z nim > Dzięki za pomoc. Doznałem oświecenia. Poczytam jeszcze dokumentację.
Pozdrawiam Adam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
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.pllunadance.htw.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 |
|