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

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

pgsql-es-ayuda by date

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

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