Consulta plpgsql

From: "Emiliano Moscato" <moski666(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Consulta plpgsql
Date: 2008-09-26 18:08:01
Message-ID: 4388f4180809261108u14766e43m24e64d0ed5708003@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola lista!

Espero que anden bien. Estoy en un brete, tengo q entregar un Trabajo
Practico y estoy tratando de hacer andar un Stored Procedure que hizo una
compañera en SQLServer.
Basicamente, la idea del algoritmo es ir haciendo ciertas consultas,
almacenarlas en tablas temporales y al final hacer un join con dos de ellas
y una tabla comun y mostrar el resultado de dicho join.
Cuando empecé a pasarlo, me encontré con que no se puede hacer select into
temp table dentro del Stored procedure, diganme si me equivoco.
Luego declare todas mis tempTables como variables record.
Actualmente, el error que me tira, es que no tengo definido el formato de la
tabla, leí por ahí que puedo definirlo como el formato de otra tabla al
definir la variable, pero no tengo ninguna tabla con la misma estructura.
Como sería la manera correcto de resolverlo?
Les adjunto al final el codigo.
Muchas gracias

Moski

CREATE OR REPLACE FUNCTION deudasSocios () RETURNS setof record AS $$
DECLARE
SocDeudaActualTemp FacturaCuota%rowtype;
FacturaCuotaTemp record;
SocDeudaAnteriorTemp record;
deudaActualTemp record;
deudaAnteriorTemp record;
SocioDeudaTemp record;
familiaresTemp record;

BEGIN

/*devuelve la mayor fecha de vencimiento de cada socio del a�o actual*/
EXECUTE 'SELECT FC.Nro_Base, max(FC.fecha_vencimiento) as
fecha_vencimiento
FROM FacturaCuota as FC
GROUP BY FC.Nro_Base'
INTO SocDeudaActualTemp;

/*devuelve todas las facturas del a�o anterior*/
EXECUTE 'SELECT *
FROM FacturaCuota as FC
WHERE extract(year from FC.fecha_vencimiento) = extract(year from
current_date) - 1'
INTO FacturaCuotaTemp;

/*devuelve la mayor fecha de vencimiento de cada socio del a�o
anterior*/
EXECUTE 'SELECT FC.Nro_Base, max(FC.fecha_vencimiento) as
fecha_vencimiento
FROM FacturaCuotaTemp as FC
GROUP BY FC.Nro_Base'
INTO SocDeudaAnteriorTemp;

/*devuelve la deuda acumulada hasta el momento*/
EXECUTE 'SELECT FC.Nro_Base, FC.deuda as deuda
FROM SocDeudaActualTemp, FacturaCuota as FC
WHERE FC.Nro_Base = SocDeudaActualTemp.Nro_Base and
FC.fecha_vencimiento = SocDeudaActualTemp.fecha_vencimiento '
INTO deudaActualTemp;

/*devuelve la deuda acumulada hasta el a�o anterior*/
EXECUTE 'SELECT FC.Nro_Base, FC.deuda as deuda
FROM SocDeudaAnteriorTemp, FacturaCuota as FC
WHERE FC.Nro_Base = SocDeudaAnteriorTemp.Nro_Base and
SocDeudaAnteriorTemp.fecha_vencimiento = FC.fecha_vencimiento'
INTO deudaAnteriorTemp;

/*devuelve la deuda del ultimo a�o*/
EXECUTE 'SELECT deudaActualTemp.nro_base, (deudaActualTemp.deuda -
deudaAnteriorTemp.deuda) as deuda
FROM deudaActualTemp, deudaAnteriorTemp
WHERE deudaAnteriorTemp.Nro_Base = deudaActualTemp.Nro_Base and
(deudaActualTemp.deuda - deudaAnteriorTemp.deuda) > 0'
INTO SocioDeudaTemp ;

/*devuelve la cantidad de socios familiares que tiene cada socio
titular*/
EXECUTE 'SELECT count(SF.nro_base) as cantidadFamilia, SF.nro_base
FROM SocioFamiliar as SF
GROUP BY SF.nro_base'
INTO familiaresTemp;

/*devuelve los datos del socio titular de grupos familiares que adeuden
cuotas sociales del
a�o en curso, junto con el importe total adeudado, y la cantidad de
integrantes del
grupo.*/
RETURN QUERY SELECT SocioDeudaTemp.deuda,
familiaresTemp.cantidadFamilia, ST.*
FROM quote_ident(SocioDeudaTemp), quote_ident(familiaresTemp),
SocioTitular as ST
WHERE SocioDeudaTemp.nro_base = familiaresTemp.nro_base and
ST.nro_base = SocioDeudaTemp.nro_base;

END;
$$ LANGUAGE 'plpgsql';

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo Franco 2008-09-26 19:19:46 Re: Consulta plpgsql
Previous Message Gabriel Hermes Colina Zambra 2008-09-26 17:59:48 Re: [Probablemente Spam] Re: PostgreSQL Spanish Documentation Project and Developmented create od Event next Year for Latin America for Country Regional