Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Asignar información de cursor a arreglo. PL/PgSQL

Estas en el tema de Asignar información de cursor a arreglo. PL/PgSQL en el foro de PostgreSQL en Foros del Web. Un saludo para todos. Tengo una tabla con bastantes datos y necesito mediante un cursor, llenar en un arreglo (double precision[][]) el contenido de una ...
  #1 (permalink)  
Antiguo 24/03/2009, 10:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Asignar información de cursor a arreglo. PL/PgSQL

Un saludo para todos.

Tengo una tabla con bastantes datos y necesito mediante un cursor, llenar en un arreglo (double precision[][]) el contenido de una consulta.

Para algunas consultas lo he hecho de la siguiente forma:

open cur for select k,am,e,cr_res,tb_min,tb_max from especies where cod_especie = $1;
fetch cur into k_enc,am_enc,e_enc,cr_res_enc,TBmin_enc,TBmax_enc;
close cur;

Lo anterior, me asigna a las variables k_enc,am_enc,e_enc,cr_res_enc,TBmin_enc,TBmax_enc declaradas previamente, el contenido de la consulta. (La consulta retorna un solo registro.) Después de esto, lleno manualmente el vector con los valores de las variables y lo retorno.

El problema es cuando la consulta tiene múltiples registros y múltiples columnas y necesito cada uno de los valores retornados por el cursor.

Como puedo hacerlo?

Muchas gracias de antemano.

Última edición por huesos52; 24/03/2009 a las 10:07
  #2 (permalink)  
Antiguo 24/03/2009, 11:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
Respuesta: Asignar información de cursor a arreglo. PL/PgSQL

no se si entendi bien tu consulta, pero puede que tu duda sea algo como esto:
Código:
CREATE FUNCTION nn()
RETURNS char(35)[][] AS $$
DECLARE auno char(35)[];
	ados char(35)[][];
	cursor1 cursor FOR SELECT ARRAY[uno.codigo,uno.detalle]  FROM (SELECT codigo,detalle FROM tabla) AS uno;
BEGIN
	OPEN cursor1;
	fetch cursor1 into auno;
	while found loop		
		ados:=array_cat(ados,auno);
		fetch cursor1 into auno;
	end loop;
	close cursor1;
	RETURN ados;
END;
$$ LANGUAGE plpgsql;
  #3 (permalink)  
Antiguo 24/03/2009, 12:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Asignar información de cursor a arreglo. PL/PgSQL

Hola refreegrata.
Efectivamente tu solución me ha retornado los datos.
Muchas gracias.

Pero me surge unas pequeñas dudas:

Cuando yo retorno arrays en pl, me salen en formato {{"elemento","elemento2"},{"elemento3","elemento4" }} para una matriz de 2*2.
En este caso retorno como tipo de dato a ados[][]. Por que me retorna todos los valores como si fuera un vector ({elemento","elemento2","elemento3","elemento4"})?

Cita:
ados:=array_cat(ados,auno);
Que hace esta función?

De nuevo muchas gracias.
  #4 (permalink)  
Antiguo 24/03/2009, 13:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
Respuesta: Asignar información de cursor a arreglo. PL/PgSQL

array_cat concatena 2 arrays
respecto a los arreglos no recuerdo mucho pero si cambiaras la linea del cursor por algo asi
Código:
cursor1 cursor FOR SELECT ARRAY[ARRAY[uno.codigo,uno.detalle]] FROM (SELECT codigo,detalle FROM tabla) AS uno;
podria funcionar, ahi vez tu si es lo optimo o no. Saludos.
  #5 (permalink)  
Antiguo 24/03/2009, 13:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Asignar información de cursor a arreglo. PL/PgSQL

Perfecto refreegata.

Muchas gracias. Te debo una.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:53.