Corregidos los múltiples errores de sintaxis, la función sería:
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION actualizar_id_mun() RETURNS void AS
$BODY$
DECLARE
x INTEGER;
BEGIN
x:=1;
WHILE (x<SELECT COUNT(*) FROM parcelas) LOOP
UPDATE parcelas SET id_municipio=(SELECT municipio.id FROM municipio WHERE municipio.nombre=parcelas.municipio) WHERE parcelas.id=x;
x:=x+1;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Pero al ejecutarla me vuelve a dar el error de:
ERROR: more than one row returned by a subquery used as an expression