From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Alejandro Gasca <agasca(at)yahoo(dot)com> |
Cc: | ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: pregunta sobre modificacion de registros en plpgsql |
Date: | 2006-08-28 14:25:53 |
Message-ID: | 20060828142553.GE27526@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Alejandro Gasca escribió:
> He intentado hacer un procedimiento para modificar datos de una tabla,
> especificamente, he intentado hacer algo parecido a esto :
>
> CREATE OR REPLACE FUNCTION fun1_escaneo_tabla()
> RETURNS void AS
> $BODY$Declare
> rec RECORD;
> i integer := 0;
> BEGIN
> For rec in Select * from mi_tabla LOOP
> i := i+1;
> rec.entero := i;
> End Loop;
> END$BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
> Cuando ejecuto la funcion la tabla no se modifica, aunque tampoco manda
> un error diciendo que rec.entero sea de solo lectura
Claro que no te manda un error, porque no es de solo lectura. Y claro
que la tabla no se modifica, porque lo que estas modificando es una
variable local de la funcion.
> no se si vaya por buen camino queriendome "ahorrar" el update,
No, no vas.
> simplemente sea una impostura quereme ahorrar el update, poniendo por
> ejemplo:
> [...]
> i := i+1;
> update mi_tabla set entero = i where mi_tabla.clave = rec.clave;
Esto no tiene mucho sentido. Lo que quieres hacer se hace de la
siguiente manera:
create temp sequence secuencia;
update mi_tabla set entero = nextval('secuencia');
(no lo probe pero esa es la idea).
No necesitas una funcion para hacer eso. Y hacer un loop sobre un
SELECT para luego hacer un UPDATE de cada fila que te retorna es mala
idea. El UPDATE que te doy hace lo mismo, de manera mas eficiente.
Tambien lo podrias hacer con un JOIN en el UPDATE contra la funcion
generate_series().
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From | Date | Subject | |
---|---|---|---|
Next Message | aberub-tutopia | 2006-08-28 15:57:31 | Re: pregunta sobre modificacion de registros en plpgsql |
Previous Message | Moises Alberto Lindo Gutarra | 2006-08-28 13:49:20 | Re: OT? JDBC y campos nulos |