Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: aberub-tutopiaDate: 2006-08-28 15:57:31
Subject: Re: pregunta sobre modificacion de registros en plpgsql
Previous:From: Moises Alberto Lindo GutarraDate: 2006-08-28 13:49:20
Subject: Re: OT? JDBC y campos nulos

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group