PostgreSQL - Funciones en PostgreSql

 
Vista:

Funciones en PostgreSql

Publicado por Orison (1 intervención) el 29/06/2006 23:49:18
La consulta es esta. Estoy tratando de hacer una funcion en que me permita recorrer los registros de una tabla y que en cada registro desde el primero me coloque en el id un numero 1 y asi sucesivamente 1,2,3,4,5... hasta el final de registros que contenga la tabla, osea enumerar los datos que existen en la tabla, construi esta funcion pero tengo problemas.

*/////////////////////////////////////////////////////////////////////////////////

DECLARE

CONTADOR int4;
registro_visit RECORD;
BEGIN

CONTADOR:=1;
/*PERFORM cs_log('Enumarando los datos...');*/

FOR registro_visit IN SELECT * FROM tbl_visitante LOOP

EXECUTE 'UPDATE ' || registro_visit || 'SET ' || registro_visit.id_visi=CONTADOR;

CONTADOR:=CONTADOR+1;

END LOOP;
/*PERFORM cs_log('Hecho.');*/
RETURN 1;
END;

*//////////////////////////////////////////////////////////////////////////////

Cual podra ser el problema ?, espero que me puedan ayudar,

El error es:

ERROR: could not find array type for data type record
CONTEXT: SQL statement "SELECT 'UPDATE ' || $1 || 'SET ' || $2 = $3 "
PL/pgSQL function "enumera" line 12 at execute statement


Gracias a todos

Orison
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Funciones en PostgreSql

Publicado por Julio (334 intervenciones) el 03/07/2006 06:32:47
DECLARE

CONTADOR int4;
registro_visit RECORD;
BEGIN

CONTADOR:=1;
/*PERFORM cs_log('Enumarando los datos...');*/

FOR registro_visit IN SELECT * FROM tbl_visitante LOOP
-- Aqui tienes el error, el record solo te sirve para recorrer la tabla
-- no para asignarle un registro y actualizar el mismo record
-- EXECUTE 'UPDATE ' || registro_visit || 'SET ' || registro_visit.id_visi=CONTADOR;

EXECUTE 'UPDATE ' || tbl_visitante || 'SET id_visi=' ||CONTADOR::varchar;

--- ó

Update tbl_visitante Set id_visi = CONTADOR Where id_visi= registro_visit.id_visi;

CONTADOR:=CONTADOR+1;

END LOOP;
/*PERFORM cs_log('Hecho.');*/
RETURN 1;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar