Recorrer una consulta según un dato de una tabla

From: Ricardo Fuentes Pereira <rfuentesp(at)gmail(dot)com>
To: "'pgsql-es-ayuda(at)postgresql(dot)org'" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Recorrer una consulta según un dato de una tabla
Date: 2005-05-18 15:47:14
Message-ID: 428B6382.90506@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola.

Necesito recorrer una tabla en funcion de un parámetro que se obtiene de
otra. Hasta aquí lo que llevo:

----
CREATE OR REPLACE FUNCTION select()
RETURNS refcursor AS
'
DECLARE
rec RECORD;
rc REFCURSOR;
BEGIN
FOR rec IN
SELECT param
FROM tabla1
LOOP
END LOOP;

OPEN rc FOR
SELECT *
FROM tabla2
WHERE rut = rec.param;
RETURN rc;
END;
'
LANGUAGE 'plpgsql' VOLATILE;
----

Antes hacía esto en el lenguaje de programación (Java), o sea obtenía
todos los parametros, y luego uno a uno iba obteniendo los datos de la
'tabla2'. Funcionaba bien hasta que lo probamos en un entorno real donde
habían muchos datos. Y claro, el tiempo de espera se hizo eterno (6
minutos mas o menos), ocupa toda la CPU, entre otros problemas. Ahí el
cuello de botella estaría (a grueso modo) en abrir la conexion, obtener
los datos y cerrar la conexion por cada parametro.

Volviendo a mi primer experimento, al ejecutar el SP, solo me devuelve
un registro. ¿Alguna idea de por qué ocurre esto?¿Cómo podría solucionar
mi problema?

Salu2.

PD1: Estoy "obligado" a devolver un refcursor debido a que trabajo con
Java y según la especificación tengo que trabajar con ese tipo de dato
para obtener los registros/filas.

PD2: Quiza tenga un error en mi diseño de BD y pueda realizar esa
consulta sin pedir los parametros desde otra tabla, pero necesito hacer
eso ahora...

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message angel Iracheta 2005-05-18 15:48:56 Re: Conectar con PostGreSql
Previous Message Edwin Quijada 2005-05-18 15:42:46 RE: ayuda