PL/pgSQL "compilation error" - Mailing list pgsql-sql
| From | Tim Perdue |
|---|---|
| Subject | PL/pgSQL "compilation error" |
| Date | |
| Msg-id | 20010314085635.O670@mail.perdue.net Whole thread Raw |
| Responses |
Re: PL/pgSQL "compilation error"
Re: PL/pgSQL "compilation error" |
| List | pgsql-sql |
Hello all - I apologize for the newbie-esque question, but the debug output
from postgres when you have a bug in your PL/pgSQL procedure is none to
detailed.
I've created the following procedure and am getting an error when I try to
update the table. The error is something like "parse error near ; on line 50".
Line 50 is the last line.
There's probably something glaring wrong in here that I'm not seeing, but any
help would be appreciated.
I don't know if the \ at the end of the line is a problem, but those were
added late in the game and didn't change the error message ;-)
Tim
CREATE FUNCTION artifactgroup_update_agg () RETURNS OPAQUE AS '
BEGIN -- -- see if they are moving to a new artifacttype -- if so, its a more complex operation -- IF
NEW.group_artifact_id<> OLD.group_artifact_id THEN -- -- transferred artifacts always have a status of 1 --
sowe will increment the new artifacttypes sums -- UPDATE artifact_counts_agg SET count=count+1,
open_count=open_count+1\ WHERE group_artifact_id=NEW.group_artifact_id;
-- -- now see how to increment/decrement the old types sums -- IF NEW.status_id <> OLD.status_id
THEN IF OLD.status_id = 2 THEN UPDATE artifact_counts_agg SET count=count-1 \ WHERE
group_artifact_id=OLD.group_artifact_id; -- -- no need to do anything if it was in deleted status
-- END IF; ELSE -- -- Was already in open status before -- UPDATE
artifact_counts_aggSET count=count-1, open_count=open_count-1 \ WHERE
group_artifact_id=OLD.group_artifact_id; END IF; ELSE -- -- just need to evaluate the status flag and
--increment/decrement the counter as necessary -- IF NEW.status_id <> OLD.status_id THEN IF
new.status_id= 1 THEN UPDATE artifact_counts_agg SET open_count=open_count+1 \ WHERE
group_artifact_id=new.group_artifact_id; ELSE IF new.status_id = 2 THEN UPDATE artifact_counts_agg SET
open_count=open_count-1\ WHERE group_artifact_id=new.group_artifact_id; ELSE IF new.status_id = 3
THEN UPDATE artifact_counts_agg SET open_count=open_count-1,count=count-1 \ WHERE
group_artifact_id=new.group_artifact_id; END IF; END IF; END IF; RETURN NEW;
END;
' LANGUAGE 'plpgsql';
CREATE TRIGGER artifactgroup_update_trig AFTER UPDATE ON artifact FOR EACH ROW EXECUTE PROCEDURE
artifactgroup_update_agg();
--
Founder - PHPBuilder.com / Geocrawler.com
Lead Developer - SourceForge
VA Linux Systems