Thread: Error near delete in plpgsql function
Hi folks
I started psql and loaded the script using \i deletescript.sql. Then I called the function using select delete_items(); I get the following error:
I have the following function in a file called deletescript.sql.
CREATE OR REPLACE FUNCTION delete_items() RETURNS integer AS '
DECLARE
m RECORD;
n RECORD;
BEGIN
FOR m in SELECT item_id from ITEM where owning_colletion=37 LOOP
FOR n in SELECT workflow_id from workflowitem where collection_id=37 and item_id=m.item_id LOOP
delete from tasklistitem where workflow_id=n.workflow_id;
END LOOP
delete from workflowitem where collection_id=37 and item_id=m.item_id;
END LOOP;
delete from item where owning_collection=37;
return 1;
END;
' LANGUAGE plpgsql;
ERROR: syntax error at or near "delete"
CONTEXT: compile of PL/pgSQL function "delete_items" near line 9
ERROR: syntax error at or near "delete"
CONTEXT: compile of PL/pgSQL function "delete_items" near line 9
Any idea why this happened? I've tried searching the web and the archives, but no clue.
Thanks and best regards
--
Muhammad Saqib Ilyas
PhD Student, Computer Science and Engineering
Lahore University of Management Sciences
--
Muhammad Saqib Ilyas
PhD Student, Computer Science and Engineering
Lahore University of Management Sciences
On June 6, 2011 08:58:49 AM Saqib Ilyas wrote: > END LOOP > ERROR: syntax error at or near "delete" > CONTEXT: compile of PL/pgSQL function "delete_items" near line 9 > ERROR: syntax error at or near "delete" > CONTEXT: compile of PL/pgSQL function "delete_items" near line 9 > > Any idea why this happened? I've tried searching the web and the archives, > but no clue. > Thanks and best regards missing semi-colon at end of line 9 (the first END LOOP). -- Obama has now fired more cruise missiles than all other Nobel Peace prize winners combined.
Saqib Ilyas <msaqib@gmail.com> writes: > Hi folks > I have the following function in a file called deletescript.sql. > CREATE OR REPLACE FUNCTION delete_items() RETURNS integer AS ' > DECLARE > m RECORD; > n RECORD; > BEGIN > FOR m in SELECT item_id from ITEM where owning_colletion=37 LOOP > FOR n in SELECT workflow_id from workflowitem where collection_id=37 > and item_id=m.item_id LOOP > delete from tasklistitem where workflow_id=n.workflow_id; > END LOOP > delete from workflowitem where collection_id=37 and > item_id=m.item_id; > END LOOP; > delete from item where owning_collection=37; > return 1; > END; > ' LANGUAGE plpgsql; > I started psql and loaded the script using \i deletescript.sql. Then I > called the function using select delete_items(); I get the following error: > ERROR: syntax error at or near "delete" > CONTEXT: compile of PL/pgSQL function "delete_items" near line 9 > ERROR: syntax error at or near "delete" > CONTEXT: compile of PL/pgSQL function "delete_items" near line 9 > Any idea why this happened? You forgot to put a semicolon after the first END LOOP. regards, tom lane
Saqib Ilyas <msaqib@gmail.com> wrote: > Hi folks > I have the following function in a file called deletescript.sql. > > CREATE OR REPLACE FUNCTION delete_items() RETURNS integer AS ' $$ > DECLARE > m RECORD; > n RECORD; > BEGIN > FOR m in SELECT item_id from ITEM where owning_colletion=37 LOOP > FOR n in SELECT workflow_id from workflowitem where collection_id=37 > and item_id=m.item_id LOOP > delete from tasklistitem where workflow_id=n.workflow_id; > END LOOP > delete from workflowitem where collection_id=37 and item_id=m.item_id; > END LOOP; > delete from item where owning_collection=37; > return 1; > END; > ' LANGUAGE plpgsql; $$ change the ' to $$ Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknown) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°