plpgsql trigger parse error - Mailing list pgsql-general
From | Roland Roberts |
---|---|
Subject | plpgsql trigger parse error |
Date | |
Msg-id | m21y8037po.fsf@kuiper.rlent.pnet Whole thread Raw |
Responses |
Re: plpgsql trigger parse error
Re: plpgsql trigger parse error |
List | pgsql-general |
I am having trouble getting a pl/PgSQL function to parse correctly and my usual divide and conquer strategy is not working very well. The full function appears at the bottom. When I simplified it to only the first if (...) clause, it works. When I added the first else if (...) clause, as shown immediately below, it fails. create function deepsky_nodups() returns opaque as ' begin if (NEW.suffix is NULL and NEW.component is NULL) then if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and suffix is null and componentis null)) then return NULL; end if; else if (NEW.component is NULL) then if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and suffix = NEW.suffixand component is null)) then return NULL; end if end if; return NEW; end; ' language 'plpgsql'; create trigger ds_nodups before insert on deepsky for each row execute procedure deepsky_nodups(); When it fires via the following insert insert into deepsky (catalog, entry) values ('NGC', '1'); I get this error NOTICE: plpgsql: ERROR during compile of deepsky_nodups near line 6 ERROR: parse error at or near "else" I've stared at this so long I've run out of ideas on what might be wrong. I started by cutting it down to the first if (...) and exists clause. That works fine, i.e., create function deepsky_nodups() returns opaque as ' begin if (NEW.suffix is NULL and NEW.component is NULL) then if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and suffix is null and componentis null)) then return NULL; end if; end if; return NEW; end; ' language 'plpgsql'; is fine. The full function gives me a different error, NOTICE: plpgsql: ERROR during compile of deepsky_nodups near line 20 ERROR: parse error at or near ";" Here is the full function: create function deepsky_nodups() returns opaque as ' begin if (NEW.suffix is NULL and NEW.component is NULL) then if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and suffix is null and componentis null)) then return NULL; end if; else if (NEW.component is NULL) then if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and suffix = NEW.suffixand component is null)) then return NULL; end if; else if (NEW.suffix is NULL) then if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and component = NEW.componentand suffix is null)) then return NULL; end if; else if (exists (select id from deepsky where catalog = NEW.catalog and entry = NEW.entry and component = NEW.componentand suffix = NEW.suffix)) then return NULL; end if; end if; return NEW; end; ' language 'plpgsql'; What am I missing? roland -- PGP Key ID: 66 BC 3B CD Roland B. Roberts, PhD RL Enterprises roland@rlenter.com 76-15 113th Street, Apt 3B roland@astrofoto.org Forest Hills, NY 11375
pgsql-general by date: