durch update in einem trigger einen anderen trigger

--=-oBHBbKH7LRABBtYlT3fR
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Hallo Liste ich habe folgendes Problem:
wenn ich ein ein insert mache wird insert-trigger (ich mache ein update)
aufgerufen.
dieses update wiederum müsste update-trigger(ich mach was andres)
aufrufen.
leider passiert nur step 1
führe ich jedoch ein händisches update foo.bar value 123 aus dann feuer=
t
update-trigger.

Bitte CC an mich, da ich nicht subscribed bin.

Vielen Dank
Daniel



CREATE OR REPLACE FUNCTION create_basnhex()
RETURNS "trigger" AS
'
BEGIN
IF TG_OP =3D ''INSERT'' THEN
UPDATE artbacn SET countanzahl =3D NEW.anzahl WHERE banr =3D
NEW.banr ;
END IF;
RETURN NEW;
END;
'
LANGUAGE 'plpgsql' VOLATILE;

CREATE OR REPLACE FUNCTION update_basnhex()
RETURNS "trigger" AS
'
BEGIN
IF TG_OP =3D ''UPDATE'' THEN
INSERT INTO basnhex (banr) VALUES (NEW.banr) ;
UPDATE artbacn SET countanzahl =3D NEW.countanzahl -1 WHERE banr =3D
NEW.banr AND OLD.countanzahl > 1;
END IF;
RETURN NEW;
END;
'
LANGUAGE 'plpgsql' VOLATILE;

DROP TRIGGER watch_artbacn ON artbacn;

CREATE TRIGGER watch_artbacn
AFTER INSERT
ON artbacn
FOR EACH ROW
EXECUTE PROCEDURE create_basnhex();

/*
CREATE or replace RULE copy_artbacn AS ON INSERT TO artbacn DO ( insert
into artbacn (countanzahl) SELECT anzahl FROM artbacn where countanzahl
IS NULL);
*/

DROP TRIGGER watch_artbacn2 ON artbacn;
CREATE TRIGGER watch_artbacn2
AFTER UPDATE ON artbacn
FOR EACH ROW
EXECUTE PROCEDURE update_basnhex();


dieses command feuert nur den ersten trigger
insert into artbacn (banr,articlenr,anzahl) values (20,1,900);

dieses command feurt wie gewünscht den zweiten trigger
update artbacn set anzahl =3D '800' where banr =3D '18'



--
Erst wenn der letzte Programmierer/Codebreaker eingesperrt...
....und die letzte Idee/Algorithm patentiert ist, werdet ihr merken, dass
Anwälte nicht programmieren können.

Daniel J. Priem

mail danielpriem [at] flexserv.de
http://flexserv.de

--=-oBHBbKH7LRABBtYlT3fR
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: Dies ist ein digital signierter Nachrichtenteil

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQBEEhciU9jdS3sZZnERAiGAAKCBI0xc3PYqLv0vtLS1DR19S+/YQACg g0FJ
4tzEFHrbvT34dmNVk1qG7bc=
=IBmy
-----END PGP SIGNATURE-----

--=-oBHBbKH7LRABBtYlT3fR--
danielpriem [ Sa, 11 März 2006 01:17 ] [ ID #1225778 ]

Re: durch update in einem trigger einen anderen trigger

--=-=-=
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

Daniel J. Priem writes:

> wenn ich ein ein insert mache wird insert-trigger (ich mache ein update)
> aufgerufen.
> dieses update wiederum müsste update-trigger(ich mach was andres)
> aufrufen.
> leider passiert nur step 1
> führe ich jedoch ein händisches update foo.bar value 123 aus dann feu=
ert
> update-trigger.

Welche PostgreSQL-Version? Wie sehen die DDL-Statements aus? Ohne ein
vollständiges Beispiel zum Reproduzieren kann man sonst nur raten.

Sicher, daß der Trigger nicht auslöst? Im Zweifelsfall ein RAISE
NOTICE einbauen. Möglicherweise findet ja eines der Statements keine
passenden Zeilen...

> CREATE OR REPLACE FUNCTION update_basnhex()
> RETURNS "trigger" AS
> '
> BEGIN
> IF TG_OP =3D ''UPDATE'' THEN
> INSERT INTO basnhex (banr) VALUES (NEW.banr) ;
> UPDATE artbacn SET countanzahl =3D NEW.countanzahl -1 WHERE banr =3D
> NEW.banr AND OLD.countanzahl > 1;

....wenn deine DDL hier z.B. keinen passenden Defaultwert enthält, ist
"countanzahl" wohl NULL, und es passiert deshalb vielleicht nicht, was
du erwartest.

> /*
> CREATE or replace RULE copy_artbacn AS ON INSERT TO artbacn DO ( insert
> into artbacn (countanzahl) SELECT anzahl FROM artbacn where countanzahl
> IS NULL);
> */

Ist die Rule nun in der Datenbank oder nicht?

HTH
Andreas
=2D-

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFEFWnzLABrNA+MjBsRAgE9AKCv9ld8mwymduU7Y3i57/oTtZJGaACf WUrU
B4jcjybH1/+xaQ7RS8+LZ9E=
=JMh0
-----END PGP SIGNATURE-----
--=-=-=--
Andreas Seltenreich [ Mo, 13 März 2006 13:47 ] [ ID #1226993 ]
Datenbanken » gmane.comp.db.postgresql.german » durch update in einem trigger einen anderen trigger

Vorheriges Thema: Zeichen ändern
Nächstes Thema: Sequenz mit Ausnahmen