11/12/2007, 22:41
|
| | Fecha de Ingreso: diciembre-2007 Ubicación: Coronel
Mensajes: 4
Antigüedad: 17 años, 1 mes 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 |