Hi,
instead of
*update workorderRecord set wfstatus='failed'; *

try:
workorderRecord.wfstatus := 'failed';

I haven't tested, but workorderRecord is ROWTYPE, so shouldn't be updated
like a table.
I'm sticked to 9.1, hope the same is for 8.1
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html

According to doc for 8.3 it looks the same (
http://www.postgresql.org/docs/8.3/static/plpgsql-declarations.html), so
should work.

Regards,
Bartek


2012/2/28 Lummis, Patrick J <p...@dolby.com>

> **
>
> Hi,
>
> I'm trying to update a record within a for loop and at the point of
> updating I get the following syntax error:
>
> ERROR:  syntax error at or near "$1"
> LINE 1: update  $1  set wfstatus='failed'
>                 ^
> QUERY:  update  $1  set wfstatus='failed'
> CONTEXT:  SQL statement in PL/PgSQL function
> "workorder_status_integrity_check" near line 13
>
> ********** Error **********
>
> ERROR: syntax error at or near "$1"
> SQL state: 42601
> Context: SQL statement in PL/PgSQL function
> "workorder_status_integrity_check" near line 13
>
> Below is the procedure in question using Postgres 8.1:
>
> CREATE OR REPLACE FUNCTION workorder_status_integrity_check() RETURNS
> integer AS $$
> DECLARE
>      workorderRecord workorder%ROWTYPE;
>      declare counter int DEFAULT 0;
> BEGIN
>
>      FOR workorderRecord IN SELECT * from workorder LOOP
>
>      IF workorderRecord.wfstatus = 'canceled' THEN
>         counter = counter +1;
>      ELSEIF workorderRecord.wfstatus = 'finished' THEN
>         counter = counter +1;
>      ELSE
>         update workorderRecord set wfstatus='failed';
>
>      END IF;
>      END LOOP;
>      RETURN counter;
> END;
> $$ LANGUAGE plpgsql;
>
> Thanks, Patrick
>
>
>

Reply via email to