X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.130]) by svr1.postgresql.org (Postfix) with ESMTP id 915ACD1B547 for ; Wed, 24 Sep 2003 14:43:26 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (neptune.hub.org [64.117.224.130]) (amavisd-new, port 10024) with ESMTP id 56131-03 for ; Wed, 24 Sep 2003 11:42:58 -0300 (ADT) Received: from fzkmail2.fzk.de (fzkmail2.fzk.de [141.52.27.52]) by svr1.postgresql.org (Postfix) with SMTP id 7C36FD1B58E for ; Wed, 24 Sep 2003 11:42:53 -0300 (ADT) Received: FROM resy5.fzk.de BY fzkmail2.fzk.de ; Wed Sep 24 16:42:56 2003 +0200 Received: œby rodos.fzk.de with ESMTP (8.8.6 (PHNE_17135)/8.7.1) id QAA17674 for ; Wed, 24 Sep 2003 16:42:56 +0200 (METDST) Message-ID: <3F71AD6F.35E644B0@rodos.fzk.de> Date: Wed, 24 Sep 2003 16:42:56 +0200 From: Christoph Haller X-Mailer: Mozilla 4.77 [en] (X11; U; HP-UX B.10.20 9000/780) X-Accept-Language: en MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: [Fwd: plpgsql triggers question -> foo := NEW ?] Content-Type: multipart/mixed; boundary="------------783C81E94DCE00AA5C2A5D35" X-Virus-Scanned: by amavisd-new at postgresql.org X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char 9C hex) in message header 'Received' Received: \234by rodos.fzk.de... ^ X-Archive-Number: 200309/279 X-Sequence-Number: 15257 This is a multi-part message in MIME format. --------------783C81E94DCE00AA5C2A5D35 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit Christoph Haller wrote: > > > > I've searched the interactive docs and found this link: > > > > http://www.postgresql.org/docs/7.3/interactive/plpgsql-trigger.html > > > > There is no answer to the question below: How to set foo:= NEW or > foo:= > > OLD in plpgsql trigger function > > (I have the same problem) > > > This should help: > > INSERT > --------- > DROP FUNCTION orderinsert() ; > > CREATE OR REPLACE FUNCTION orderinsert() RETURNS OPAQUE AS ' > BEGIN > IF NEW.CUSTOMER_ID ISNULL THEN > RAISE EXCEPTION "CUSTOMER_ID cannot be NULL value" ; > END IF ; > IF NEW.CUSTOMER_SESSION ISNULL THEN > RAISE EXCEPTION "CUSTOMER_SESSION cannot be NULL value" ; > END IF ; > > INSERT INTO HEXORDERS ( CUSTOMER_ID, ORDER_KEY, DISTRIBUTOR_ID, > ORDER_AMOUNT, ORDER_GST ) > VALUES ( NEW.CUSTOMER_ID, NEW.CUSTOMER_SESSION, 1, 0, 0 ) ; > > RETURN NEW ; > END ; > ' LANGUAGE 'plpgsql' ; > > DROP TRIGGER HEXCUST_TRIGGER1 ON HEXCUSTOMERS; > > CREATE TRIGGER HEXCUST_TRIGGER1 > AFTER INSERT ON HEXCUSTOMERS > FOR EACH ROW EXECUTE PROCEDURE orderinsert() ; > > UPDATE > ---------- > DROP FUNCTION orderupdate() ; > > CREATE OR REPLACE FUNCTION orderupdate() RETURNS OPAQUE AS ' > BEGIN > IF NEW.ORDER_ID ISNULL THEN > RAISE EXCEPTION ''ORDER_ID cannot be NULL value'' ; > END IF ; > IF NEW.CUSTOMER_ID ISNULL THEN > RAISE EXCEPTION ''CUSTOMER_ID cannot be NULL value'' ; > END IF ; > > UPDATE HEXORDERS > SET ORDER_AMOUNT = > > SELECT SUM(CUSTITEM_QUANTITY * (ITEM_BASEPRICE + > ((CUSTITEM_USERS - 1) * ITEM_USEPRICE))) > FROM HEXCUSTITEMS, HEXITEMS > WHERE HEXCUSTITEMS.CUSTOMER_ID = NEW.CUSTOMER_ID > AND HEXCUSTITEMS.ORDER_ID = NEW.ORDER_ID > AND HEXCUSTITEMS.ITEM_ID = HEXITEMS.ITEM_ID > GROUP BY HEXCUSTITEMS.ORDER_ID, > HEXCUSTITEMS.CUSTOMER_ID ), > ORDER_GST = > > SELECT SUM((CUSTITEM_QUANTITY * (ITEM_BASEPRICE + > ((CUSTITEM_USERS - 1) * ITEM_USEPRICE))) * .1::numeric) > FROM HEXCUSTITEMS, HEXITEMS > WHERE HEXCUSTITEMS.CUSTOMER_ID = NEW.CUSTOMER_ID > AND HEXCUSTITEMS.ORDER_ID = NEW.ORDER_ID > AND HEXCUSTITEMS.ITEM_ID = HEXITEMS.ITEM_ID > AND CUSTITEM_GST = TRUE > GROUP BY HEXCUSTITEMS.ORDER_ID, > HEXCUSTITEMS.CUSTOMER_ID ) > WHERE ORDER_ID = NEW.ORDER_ID > AND CUSTOMER_ID = NEW.CUSTOMER_ID ; > > RETURN NEW ; > END ; > ' LANGUAGE 'plpgsql' ; > > DROP TRIGGER HEXCUSTITEMS_TRIGGER1 ON HEXCUSTITEMS; > > CREATE TRIGGER HEXCUSTITEMS_TRIGGER1 > AFTER INSERT OR UPDATE ON HEXCUSTITEMS > FOR EACH ROW EXECUTE PROCEDURE orderupdate() ; > > DROP TRIGGER HEXCUSTITEMS_TRIGGER3 ON HEXCUSTITEMS; > > CREATE TRIGGER HEXCUSTITEMS_TRIGGER3 > AFTER DELETE ON HEXCUSTITEMS > FOR EACH ROW EXECUTE PROCEDURE orderupdate() ; > > Regards, Christoph --------------783C81E94DCE00AA5C2A5D35 Content-Type: message/rfc822 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Mozilla-Status2: 00000000 Message-ID: <3F6EB87B.6C0DD94E@rodos.fzk.de> Date: Mon, 22 Sep 2003 10:53:15 +0200 From: Christoph Haller X-Mailer: Mozilla 4.77 [en] (X11; U; HP-UX B.10.20 9000/780) X-Accept-Language: en MIME-Version: 1.0 To: news1@faith.digsys.bg Subject: Re: [SQL] plpgsql triggers question -> foo := NEW ? Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit > > I've searched the interactive docs and found this link: > > http://www.postgresql.org/docs/7.3/interactive/plpgsql-trigger.html > > There is no answer to the question below: How to set foo:= NEW or foo:= > OLD in plpgsql trigger function > (I have the same problem) > This should help: INSERT --------- DROP FUNCTION orderinsert() ; CREATE OR REPLACE FUNCTION orderinsert() RETURNS OPAQUE AS ' BEGIN IF NEW.CUSTOMER_ID ISNULL THEN RAISE EXCEPTION "CUSTOMER_ID cannot be NULL value" ; END IF ; IF NEW.CUSTOMER_SESSION ISNULL THEN RAISE EXCEPTION "CUSTOMER_SESSION cannot be NULL value" ; END IF ; INSERT INTO HEXORDERS ( CUSTOMER_ID, ORDER_KEY, DISTRIBUTOR_ID, ORDER_AMOUNT, ORDER_GST ) VALUES ( NEW.CUSTOMER_ID, NEW.CUSTOMER_SESSION, 1, 0, 0 ) ; RETURN NEW ; END ; ' LANGUAGE 'plpgsql' ; DROP TRIGGER HEXCUST_TRIGGER1 ON HEXCUSTOMERS; CREATE TRIGGER HEXCUST_TRIGGER1 AFTER INSERT ON HEXCUSTOMERS FOR EACH ROW EXECUTE PROCEDURE orderinsert() ; UPDATE ---------- DROP FUNCTION orderupdate() ; CREATE OR REPLACE FUNCTION orderupdate() RETURNS OPAQUE AS ' BEGIN IF NEW.ORDER_ID ISNULL THEN RAISE EXCEPTION ''ORDER_ID cannot be NULL value'' ; END IF ; IF NEW.CUSTOMER_ID ISNULL THEN RAISE EXCEPTION ''CUSTOMER_ID cannot be NULL value'' ; END IF ; UPDATE HEXORDERS SET ORDER_AMOUNT = SELECT SUM(CUSTITEM_QUANTITY * (ITEM_BASEPRICE + ((CUSTITEM_USERS - 1) * ITEM_USEPRICE))) FROM HEXCUSTITEMS, HEXITEMS WHERE HEXCUSTITEMS.CUSTOMER_ID = NEW.CUSTOMER_ID AND HEXCUSTITEMS.ORDER_ID = NEW.ORDER_ID AND HEXCUSTITEMS.ITEM_ID = HEXITEMS.ITEM_ID GROUP BY HEXCUSTITEMS.ORDER_ID, HEXCUSTITEMS.CUSTOMER_ID ), ORDER_GST = SELECT SUM((CUSTITEM_QUANTITY * (ITEM_BASEPRICE + ((CUSTITEM_USERS - 1) * ITEM_USEPRICE))) * .1::numeric) FROM HEXCUSTITEMS, HEXITEMS WHERE HEXCUSTITEMS.CUSTOMER_ID = NEW.CUSTOMER_ID AND HEXCUSTITEMS.ORDER_ID = NEW.ORDER_ID AND HEXCUSTITEMS.ITEM_ID = HEXITEMS.ITEM_ID AND CUSTITEM_GST = TRUE GROUP BY HEXCUSTITEMS.ORDER_ID, HEXCUSTITEMS.CUSTOMER_ID ) WHERE ORDER_ID = NEW.ORDER_ID AND CUSTOMER_ID = NEW.CUSTOMER_ID ; RETURN NEW ; END ; ' LANGUAGE 'plpgsql' ; DROP TRIGGER HEXCUSTITEMS_TRIGGER1 ON HEXCUSTITEMS; CREATE TRIGGER HEXCUSTITEMS_TRIGGER1 AFTER INSERT OR UPDATE ON HEXCUSTITEMS FOR EACH ROW EXECUTE PROCEDURE orderupdate() ; DROP TRIGGER HEXCUSTITEMS_TRIGGER3 ON HEXCUSTITEMS; CREATE TRIGGER HEXCUSTITEMS_TRIGGER3 AFTER DELETE ON HEXCUSTITEMS FOR EACH ROW EXECUTE PROCEDURE orderupdate() ; Regards, Christoph --------------783C81E94DCE00AA5C2A5D35--