Hi Guys,

I am having a "simple syntax problem" but very strange...

I am trying to make an IF / ELSE / END IF inside of a FOR ... LOOP but I am getting syntax error on this contol structure...
If I comment the IF / ELSE / ENDIF the fuction works ...


I am using PostgreSQL win 8.0
Any tip ? :-D

The function is:

CREATE OR REPLACE FUNCTION reorder()
 RETURNS int4 AS
$BODY$

DECLARE
   new_code     INTEGER;
   recs          RECORD;
   validation   varchar;
   vstrname      varchar;
   vstrcgc_cic   varchar;
   vstrquery     varchar;
   vstrupdate    varchar;

BEGIN

new_code := 1;

FOR recs IN (SELECT * FROM table1 ORDER BY is_customer, name)
LOOP

-- Validation
vstrname := replace(recs.name,$$'$$,$$\'$$);

vstrupdate := $$UPDATE table1 SET code = $$ || new_code ||
$$ WHERE old_code = $$ || recs.old_code || $$ AND is_customer $$;

IF records.is_customer IS FALSE THEN
vstrupdate := vstrupdate || $$ IS true $$;
ELSE
vstrupdate := vstrupdate || $$ IS false $$;
ENDIF;

EXECUTE vstrupdate;

new_code := new_code + 1 ;

END LOOP;

RETURN 1;
END;

$BODY$
 LANGUAGE 'plpgsql' VOLATILE;

My table1 is:

   CREATE TABLE table1
(
 code int4,
 name varchar(50),
 old_code int4,
 is_customer bool DEFAULT false
)
WITHOUT OIDS;

INSERT INTO table1 (code, name, old_code, is_customer) VALUES (9, 'John', 23, true);
INSERT INTO table1 (code, name, old_code, is_customer) VALUES (19, 'Rodrigo', 334, true);
INSERT INTO table1 (code, name, old_code, is_customer) VALUES (82, 'Fulano', 3484, true);
INSERT INTO table1 (code, name, old_code, is_customer) VALUES (1, 'Beltrano', 3454, false);
INSERT INTO table1 (code, name, old_code, is_customer) VALUES (4, 'Madicon', 23, false);


Cheers,

Rodrigo Carvalhaes


-- Esta mensagem foi verificada pelo sistema de antivírus e acredita-se estar livre de perigo.


---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to