ďťż
 
PostgreSQL - prosty wyzwalacz ďťż
 
PostgreSQL - prosty wyzwalacz
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

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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com