Re: pregunta sobre modificacion de registros en plpgsql

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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