ďťż
 
trigger z update ďťż
 
trigger z update
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

trigger z update



Piotrek+ - 07-04-2006 00:03
trigger z update
  Witam,
Chciałbym tak skonfigurować funkcję wyzwalaną, aby przy aktualizowaniu
kopiowała wpis w obrębie tego samego wiersza rekordu.

create table klient (
id serial,
klient varchar(16),
klient_kopia varchar(16) -- kopia powyższego wpisu wyk. p. trig.
);

insert into klient (klient) values ('basia');
insert into klient (klient) values ('ela');

CREATE FUNCTION aktualizuj() RETURNS trigger AS '
BEGIN
UPDATE klient SET klient_kopia=NEW.klient WHERE id=NEW.id;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER aktualizuj AFTER UPDATE ON klient FOR EACH ROW EXECUTE
PROCEDURE

update klient set klient='ania' where id=2;

Po wykonaniu ostatniego polecenia baza "wisi".. Procesor 100% i koniec.
Jakieś zapętlenie?

Jakieś sugestie?
Pozdrawiam.





Piotrek+ - 07-04-2006 00:03

  Użytkownik Piotrek+ napisał:
> Chciałbym tak skonfigurować funkcję wyzwalaną, aby przy aktualizowaniu
> kopiowała wpis w obrębie tego samego wiersza rekordu.
System zarządzania bazą danych to postgres 7.4 :)

Piotrek.




=?iso-8859-2?q?Marcin_St=EApnicki?= - 07-04-2006 00:07

  Dnia Fri, 07 Apr 2006 00:56:13 +0200, Piotrek+ napisał(a):

> Chciałbym tak skonfigurować funkcję wyzwalaną, aby przy aktualizowaniu
> kopiowała wpis w obrębie tego samego wiersza rekordu.
>
> create table klient (
> id serial,
> klient varchar(16),
> klient_kopia varchar(16) -- kopia powyższego wpisu wyk. p. trig.
> );
>
> insert into klient (klient) values ('basia');
> insert into klient (klient) values ('ela');
>
> CREATE FUNCTION aktualizuj() RETURNS trigger AS '
> BEGIN
> UPDATE klient SET klient_kopia=NEW.klient WHERE id=NEW.id;
> RETURN NEW;
> END;
> ' LANGUAGE 'plpgsql';
>
> CREATE TRIGGER aktualizuj AFTER UPDATE ON klient FOR EACH ROW EXECUTE
> PROCEDURE
>
> update klient set klient='ania' where id=2;
>
> Po wykonaniu ostatniego polecenia baza "wisi".. Procesor 100% i koniec.
> Jakieś zapętlenie?

W funkcji wywoływanej przez trigger na update masz znowu update więc
trigger jest znowu wyzwalany i tak dalej...

--
| Where there's a boy to give his heart | http://apcoln.linuxpl.org
| There's a woman to tear it apart | http://biznes.linux.pl
|---------------------------------------| http://www.juanperon.info
| JID: http://www.naszedzieci.org




Piotrek+ - 07-04-2006 00:13

  Użytkownik Marcin Stępnicki napisał:

> W funkcji wywoływanej przez trigger na update masz znowu update więc
> trigger jest znowu wyzwalany i tak dalej...
>

Faktycznie.. Chociaż nie chce mi się wierzyć, aby nie było możliwości
obejścia tego problemu. Może jakaś propozycja?

Piotrek.





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 08-04-2006 00:04

  Użytkownik Piotrek+ napisał:
> Użytkownik Marcin Stępnicki napisał:
>
>> W funkcji wywoływanej przez trigger na update masz znowu update więc
>> trigger jest znowu wyzwalany i tak dalej...
>>
>
> Faktycznie.. Chociaż nie chce mi się wierzyć, aby nie było możliwości
> obejścia tego problemu. Może jakaś propozycja?

Po co obchodzić? Lepiej go nie stworzyć problemu.

NEW.klient_kopia = NEW.klient

--
P.M.




Piotrek+ - 09-04-2006 00:19

  Użytkownik Paweł Matejski napisał:

> Po co obchodzić? Lepiej go nie stworzyć problemu.
>
> NEW.klient_kopia = NEW.klient

Nadal nie bardzo rozumiem. Przepraszam, ale to mój pierwszy trigger
i pewnie dlatego takie schody :) Po poprawieniu zawart. funkcji na:

UPDATE klient SET NEW.klient_kopia=NEW.klient WHERE id=NEW.id;

Wyświetlany jest błąd:

piotrek=> update klient set klient='ania' where id=2;
ERROR: syntax error at or near "$1" at character 20
CONTEXT: PL/pgSQL function "aktualizuj" line 2 at SQL statement

I znowu dołek :/




Brzezi - 09-04-2006 00:19

  sob, 08 kwi 2006 o 13:04 GMT, Piotrek+ napisał(a):

> UPDATE klient SET NEW.klient_kopia=NEW.klient WHERE id=NEW.id;

ale chodzi wlasnie o to zeby pozbyc sie wykonywania updatea!!!

masz rekord po zmianie NEW, zostanie on utrwalony w bazie danych, wiec po
to wlasnie robisz triggera, zeby w nim zmodyfikowac ten rekord w czasie
zmiany, czyli NEW.klient_kopia=NEW.klient, i tyle...

Pozdrawiam
Brzezi
--
[ E-mail: brzezi@enter.net.pl ][ The future isn't what it used to be. ]
[ Ekg: #3781111 ][ (It never was.) ]
[ LinuxUser: #249916 ][ ]




Piotrek+ - 09-04-2006 00:19

  Użytkownik Brzezi napisał:
> sob, 08 kwi 2006 o 13:04 GMT, Piotrek+ napisał(a):
>
>>UPDATE klient SET NEW.klient_kopia=NEW.klient WHERE id=NEW.id;
>
> ale chodzi wlasnie o to zeby pozbyc sie wykonywania updatea!!!
>
> masz rekord po zmianie NEW, zostanie on utrwalony w bazie danych, wiec po
> to wlasnie robisz triggera, zeby w nim zmodyfikowac ten rekord w czasie
> zmiany, czyli NEW.klient_kopia=NEW.klient, i tyle...

Dodałem BEFORE w triggerze i działa!!

Dziękuję wszystkim!! :)

Pozdrawiam,
Piotrek.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [pgsql] Wykonanie triggera po =?ISO-8859-2?Q?zako=F1czeniu_tra?==?ISO-8859-2?Q?nsakcji?= =?ISO-8859-2?Q?Mam_do_napisania_triggera_plpgsq?= =?ISO-8859-2?Q?l_mo=BFe_kto=B6_b=EAdzie_w_stanie_pom_?= [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= [pgsql] Zmienna jako pole NEW w trigger pl/pgSQL. [MSSQL] Wykonanie DTS za =?ISO-8859-2?Q?pomoc=B1_triggera?= =?iso-8859-2?q?firebird_i_triggery_-_logowanie_historii_zmian_zawarto=B6ci?= =?iso-8859-2?q?Jak_wykona=E6_rekompilacj=EA_procedury/triggera?= Która z baz: [PGSQL] czy [MySQL] będzie lepsza w takim zastosowaniu (masowe UPDATE) Postgresql - gdzie moge sie nauczyc pisania funkcji i triggerow w Funkcja replace w triggerach MS SQL Server 2005
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-hacjenda.opx.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