Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/12/2007, 22:41
yermatron
 
Fecha de Ingreso: diciembre-2007
Ubicación: Coronel
Mensajes: 4
Antigüedad: 16 años, 5 meses
Puntos: 0
Ayuda con una función

Bueno nose como hacer esta función.. :(

Lo que se requiere es que la función retorne fecha, el número de socio que ha pagado la multa y el monto, el monto acumulado hasta ese momento
y el número de multas pagadas acumuladas hasta ese momento.

Desde esta tabla debo sacar los datos.

CREATE TABLE multas (
num int PRIMARY KEY,
precio int,
pagado varchar (2) CHECK (pagado = 'Si' or pagado = 'No'),
fecha_pago DATE,
n_socio int
);

-- num : es el codigo que identifica las multas
-- precio: es el valor de la multa
-- pagado : si esta pagada o no la multa (Si o No)
--fecha_pago : cuando se pago la multa..
-- n_socio es el codigo que identifica a las personas de las multas.

Aquí unas inserciones..

INSERT INTO multas
VALUES (100,500,'Si','2007-12-01',111);

INSERT INTO multas
VALUES (200,500,'Si','2007-12-01',111);

INSERT INTO multas
VALUES (300,500,'No',Null,111);


Esto es lo que he realizado, pero no se que más hacer.. alguien me podría tender la mano. Quisas estoy mal, me podrían orientar

CREATE TYPE tmultas AS
(
fecha DATE,
n_socio INT,
precio INT,
monto_acum INT,
cant_acum INT
);



CREATE OR REPLACE FUNCTION f_multas ()
RETURNS SETOF tmultas
AS
$xD$
DECLARE
multass tmultas;
monto_acum INT;
cant_acum INT;
BEGIN
monto_acum := 0;
cant_acum := 0;

FOR r IN SELECT fecha_pago, n_socio, precio
FROM multas
WHERE pagado = 'Si' LOOP

multass.fecha := r.fecha_pago;
multass.n_socio := r.n_socio;
multass.precio := r.precio;
multass.monto_acum := multass.monto_acum + r.precio;
multass.cant_acum := multass.cant_acum;

RETURN NEXT multass;
END LOOP;
RETURN;
END;
$xD$
Language 'Plpgsql';


Algo asi deberia retornar la funcion.


fecha num_socio multa monto_acum cant_acum
01-11-07 125 1200 1200 1
02-11-07 128 1250 1250 1
02-11-07 125 900 2100 2
05-11-07 300 1500 1500 1
08-11-07 125 500 2600 3
12-11-07 128 1000 2250 2