Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 27D4A475D1C for ; Wed, 11 Dec 2002 07:57:17 -0500 (EST) Received: from mx.smartnet.cz (unknown [193.165.185.50]) by postgresql.org (Postfix) with ESMTP id B46444758DC for ; Wed, 11 Dec 2002 07:57:15 -0500 (EST) Received: from kuba (helo=localhost) by mx.smartnet.cz with local-esmtp (Exim 3.35 #1 (Debian)) id 18M6Po-0006mt-00; Wed, 11 Dec 2002 13:56:40 +0100 Date: Wed, 11 Dec 2002 13:56:40 +0100 (CET) From: Jakub Ouhrabka X-X-Sender: kuba@server To: Geoff Cc: "Pgsql-Admin (E-mail)" Subject: Re: Function Problem In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200212/143 X-Sequence-Number: 6638 hi, > I've got this function which works off a trigger. > The trigger is calling the function ok, but I get this error. > > NOTICE: plpgsql: ERROR during compile of mon_sum_update near line 43 > ERROR: parse error at or near "" > > Now line 43 is this either the return null or end statement at the end of > the function... > > RETURN NULL; > > END unfortunately, the error messages aren't always accurate in plpgsql... > Can anyone see what I've done wrong in there? i think there are few mistakes: there is missing "END IF;" in all IF statements, it should look like this: IF (condition) THEN statement; END IF; also conditions aren't always perfect, you should use "=" instead of "==" for comparison in plpgsql. don't use aposthrophes inside the function, it isn't necessary for expressions like new.field... if you really want them, use double aposthrophes "''" - you must quote them inside the plpgsql function. and may be there are some other mistakes. i would suggest to study syntax of plpgsql at http://www.postgresql.org/idocs/index.php?plpgsql.html carefully. it can save you a lot of time when debugging functions - the compiler isn't very wise when reporting errors... hth, kuba > > TIA > > Geoff > > > > Here is my trigger and function. > > trigger > ====== > CREATE TRIGGER doc_status_trig AFTER UPDATE ON document_status FOR EACH ROW > EXECUTE PROCEDURE mon_sum_update() > > function > ====== > CREATE FUNCTION mon_sum_upd () RETURN OPAQUE AS ' > > BEGIN > > -- Ensure we have a record that is valid . > > IF ( ! NEW.direction && NEW.direction && NEW.msgtype && NEW.status ) > THEN > RETURN NULL; > > > -- Ensure the record exists in the monitor_summary table. > > IF ( ! EXISTS SELECT * FROM monitor_summary WHERE unit = NEW.unit and > msgtype = NEW.msgtype and direction = NEW.direction and status = > NEW.status ) > THEN > INSERT INTO monitor_summary ( version, cdate, mdate, direction, unit, > msgtype, status ) VALUES ( 1, 'now', 'now', 'NEW.direction', 'NEW.unit', > 'NEW.msgtype', 'NEW.status' ); > > -- Ensure OLD and NEW status's are different. > > IF ( NEW.status == OLD.status ) > THEN > RETURN NULL; > > > -- Update the OLD status record. ( -1 ) > > UPDATE monitor_summary > SET > total = total - 1 > WHERE > direction = OLD.direction AND unit = OLD.unit AND msgtype = OLD.msgtype AND > status = OLD.status ; > > -- Update the NEW status record. ( +1 ) > > UPDATE monitor_summary > SET > total = total + 1 > WHERE > direction = OLD.direction AND unit = OLD.unit AND msgtype = OLD.msgtype AND > status = NEW.status ; > > RETURN NULL; > > END > > ' LANGUAGE 'plpgsql' ; > > > I'm using pgAdminII to insert this function, and it goes in ok.. > > - Geoff Ellis > - +44(0)2476678484 > > .-----------------------------------------------------------------. > / .-. This message is intended only for the person or .-. \ > | / \ entity to which it is addressed and may contain / \ | > | |\_. | confidential and/or privileged material. Any | ._/| | > |\| | /| review, retransmission, dissemination or other |\ | |/| > | `---' | use of, or taking of any action in reliance upon, | `---' | > | | this information by persons or entities other than | | > | | the intended recipient is prohibited. If you get | | > | | this message in error please contact the sender | | > | | by return e-mail and delete the message from your | | > | | computer. Any opinions contained in this message | | > | | are those of the author and are not given or | | > | | endorsed by Metalogic PLC unless otherwise clearly | | > | | indicated in this message and the authority of the | | > | | author to bind Metalogic is duly verified. | | > | | | | > | | Metalogic PLC accepts no liability for any errors | | > | | or omissions in the context of this message which | | > | | arise as a result of internet transmission. | | > | |-----------------------------------------------------| | > \ | | / > \ / \ / > `---' `---' > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org >